Cocos2D подклассификации - PullRequest
       1

Cocos2D подклассификации

0 голосов
/ 09 октября 2011

Я знаю, что у cocos2d есть планирование обратных вызовов для выполнения приятных задач, но когда вам нужно использовать один CCAction (например, CCMoveTo) для перемещения спрайта из позиции a в b, у вас нет возможности создавать небольшие позициив положение спрайта, пока действует действие.

Единственный возможный способ, который я нашел, - создать подкласс CCMoveTo для проверки препятствий и, следовательно, для обеспечения некоторого движениявлево или вправо для спрайта, который двигался сверху вниз на экране iPhone.Проблема в том, что у подкласса нет доступа к переменным экземпляра родительского класса (например, startPosition_ one), потому что они не были объявлены как свойства.

Поэтому для преодоления этой ситуации я использовал следующий фрагментно мне интересно, что я делаю что-то не так ...

- (void)myUpdate:(ccTime)time {
 if(delegate && method_) {
   NSNumber *num = (NSNumber *)[delegate performSelector:method_ withObject:ownTarget];

  if(num) {
   double xpos = [num doubleValue];
   [num release];

   CCMoveTo *parent = [super retain];

   parent->startPosition_.x += xpos;

   [parent release];
 }

[super update:time]; 
}

Правильно ли сохранить / освободить суперкласс?"[Супер обновление: время];"внизу кода сделаем окончательное позиционирование.

1 Ответ

0 голосов
/ 09 октября 2011
CCMoveTo *parent = [super retain];

Ой!Это утверждение не имеет абсолютно никакого смысла.Это то же самое, что написать:

[self retain];

Что касается доступа к переменным экземпляра суперкласса: если они не объявлены как @private, вы можете получить к ним доступ.Я только что проверил: они не @private.Вы должны иметь возможность написать в своем подклассе:

startPosition_.x += xpos;

Если это не сработает, убедитесь, что ваш класс действительно является подклассом CCMoveTo, а не каким-то другим классом.

Наконец,Я хотел бы сказать, что действия очень ограничены в реализации игрового процесса.Возможно, вам гораздо лучше просто анимировать игровые объекты, изменяя их свойство положения в каждом кадре на основе вектора скорости.У вас гораздо больше свободы над позицией и обновлениями позиции, и ни один из побочных эффектов таких действий, как задержка в один кадр, каждый раз при запуске нового действия.

-(void) update:(ccTime)delta
{
  // modify velocity based on whatever you need, ie gravity, or just heading in one direction
  // then update the node's position by adding the current velocity to move it:
  self.position = CGPointMake(self.position.x + velocity.x, self.position.y + velocity.y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...