2011-12-20 2 views
0

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

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

ответ

1

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

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

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

+0

Один вопрос, поскольку я устанавливаю позицию CCSprite здесь, в игровом цикле, это станет невосприимчивым к моему движению акселерометра. У меня уже есть переменная в моем игровом цикле, хотя она управляет спрайтом по оси X, поэтому, я думаю, с вашим примером кода, я бы просто заменил в своей переменной акселерометра для X, и я бы использовал ваш код для Y. Правильно? –

+0

Да, вы можете использовать этот логический код с кодом акселерометра. – Haroon

+0

Последний вопрос, я использую b2ContactListener, и я пытаюсь заставить это работать в выражении if, если сталкиваются 2 спрайта. У меня есть только ivar для моего справителя-последователя. Проблема в том, что у меня нет никакой ссылки на этот конкретный CCSprite, но у меня есть только тег. Итак, как мне получить правильную ссылку на CCSprite с тегом, который у меня есть? –

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

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

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

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

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

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

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

platform.follower = followerSprite; 

и когда вам нужно включить follow platform.followerActive = YES;

в этой точке в движущейся спрайтов, вы можете переопределить свойство SetPosition

-(void) setPosition:(CGPoint)position { 

, если (self.followerActive) { self.follower.position = ccpAdd (положение, смещение); } [super setPosition: position]; }

+0

Да, @Haroon это прекрасно иллюстрирует! :) Спасибо за информацию! –

1

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

+0

Спасибо, посмотрим также: P –

Смежные вопросы