Заставить CCSprite следовать за другим CCSprite при прикосновении? - PullRequest
0 голосов
/ 20 декабря 2011

Что я хочу сделать, так это заставить моего CCSprite следовать за другим CCSprite, когда он касается его.Теперь я имею в виду следующее: допустим, есть анимация другого CCSprite, движущегося вверх по экрану.Так что, если этот спрайт попадает в мой основной спрайт, мой главный спрайт должен подняться вместе с ним на экран.Этот другой спрайт будет платформой, так что технически в конце я бы хотел, чтобы спрайт был поверх другого спрайта , но он двигался бы вдоль вершины платформы CCSprite, как если бы платформа несла основной спрайт.

Теперь я знаю, как сделать часть обнаружения столкновений и оживить другой спрайт, но как бы я просто заставил мою платформу «переносить» мой основной CCSprite, также как элеватор работает?

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Я думаю, что вы можете установить флаг, чтобы проверить условие «когда следовать» в обновлении: метод, который вы можете переместить вторым спрайтом в соответствии с позицией первого спрайта.

-(void)update:(CCTime)delta
{   
   if(condition == YES)
   {
      secondSprite.position = ccp ( firstSprite.position.x + xOffSet , firstSprite.position.y + yOffSet);
   }
}

Попробуйте это в соответствии с вашим кодом.. Основная логика здесь ..

1 голос
/ 20 декабря 2011

Вы можете использовать действие CCFollow , чтобы любой узел следовал за любым другим узлом.

1 голос
/ 20 декабря 2011
  • Вы можете перемещать первый спрайт без использования действия, вручную обновляя его позицию в функции nextFrame: (ccTime) dt своего рода, таким образом было бы легко обновить другую позицию спрайта на основе вашей позиции спрайта плюс смещение расположить его сверху.

  • Другим решением может быть удаление спрайта-подписчика из его родительского элемента и добавление его в качестве дочернего элемента движущегося узла, я думаю, что это можно сделать без мерцания и потери производительности.

редактирование: другое решение (возможно, лучшее)

хороший подход, который отлично работает с действиями, поэтому вам не нужно вручную планировать движения

Вы можете добавить свойство к движущемуся спрайту (вам нужно создать подкласс из CCSprite, если вы этого еще не сделали), чтобы сохранить ссылку на последователя

@property (readwrite, nonatomic, assign) CCSprite *follower;
@property (readwrite, nonatomic) BOOL followerActive;

затем в своих игровых элементах вы можете создать оба спрайта и добавить их в качестве дочерних элементов вашего основного слоя, а затем добавить слабую ссылку от вашего объекта к последователю

platform.follower = followerSprite;

и когда вам нужно включить следующую платформу .followerActive = YES;

в этот момент в движущемся спрайте вы можете переопределить свойство setPosition

-(void) setPosition:(CGPoint)position { 

if (self.followerActive) { self.follower.position = ccpAdd (position, offset); } [super setPosition: position]; }

...