Sprite Kit - Применение статического импульса

У меня есть простой пример, когда я прикладываю импульс к узлу при касании, например:

[_bird.physicsBody applyImpulse:CGVectorMake(0, 15)];

Я хочу применить «статический» импульс.

Позвольте мне объяснить: когда мой узел находится в фазе падения из-за гравитации, применение импульса будет сложнее, и импульс будет применять dy из 5 вместо 15 (например).

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

Я хочу применять одно и то же количество dy в любом случае.

Есть ли способ сделать это?

Заранее спасибо за вашу помощь.


person Yaman    schedule 05.02.2014    source источник


Ответы (1)


Чтобы импульс имел одинаковый эффект на узел спрайта независимо от его состояния, вы можете попробовать установить его свойство velocity равным нулю. Вот так:

_bird.physicsBody.velocity = CGVectorMake(0,0);
[_bird.physicsBody applyImpulse:CGVectorMake(0, 15)];

Это должно заставить «птицу» (Flappy Bird?) вести себя одинаково в любой ситуации.

person ZeMoon    schedule 05.02.2014
comment
о боже мой _bird.physicsBody.velocity = CGVectorMake(0,0); это то, что я так долго искал, спасибо, чувак - person Ahmet Hayrullahoglu; 03.08.2014
comment
Да, он работает со статическим импульсом, но не двигается влево и вправо - person Jugal K Balara; 07.01.2016
comment
@JugalKBalara, что ты имеешь в виду? Вы хотите, чтобы импульс заставил его двигаться влево/вправо? Затем вы также должны указать значение для переменной x. Например. [_bird.physicsBody applyImpulse:CGVectorMake(15, 15)]; Вы также можете опубликовать новый вопрос с этим. - person ZeMoon; 07.01.2016
comment
Спасибо @ZeMoom [_bird.physicsBody applyImpulse:CGVectorMake(15, 15)]; этот код строки работает, но всегда движется вправо - person Jugal K Balara; 07.01.2016