Cocos2D гравитация? - PullRequest
       14

Cocos2D гравитация?

4 голосов
/ 15 ноября 2011

Я действительно стараюсь иметь гравитацию в своей игре. Я знаю, что все говорят, что используют Box2D, но в моем случае я не могу. Мне нужно использовать Cocos2D для гравитации.

Я знаю, что в Cocos2D нет встроенного API гравитации, поэтому мне нужно что-то делать вручную. Дело в том, что нигде в Интернете нет учебных пособий или примеров, показывающих это.

Может кто-нибудь показать мне, что они сделали, или некоторые могут объяснить шаг за шагом о том, как применить непостоянную гравитацию (ту, которая становится немного сильнее при падении).

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

Спасибо!

1 Ответ

12 голосов
/ 15 ноября 2011

Гравитация - это не что иное, как постоянная скорость, применяемая к телу на каждом физическом шаге.Посмотрите на этот примерный метод обновления:

-(void) update:(ccTime)delta
{
   // use a gravity velocity that "feels good" for your app
   const CGPoint gravity = CGPointMake(0, -0.2);

   // update sprite position after applying downward gravity velocity
   CGPoint pos = sprite.position;
   pos.y += gravity.y;
   sprite.position = pos;
}

В каждом кадре позиция спрайта y будет уменьшаться.Это простой подход.Для более реалистичного эффекта вы захотите иметь вектор скорости для каждого движущегося объекта и применить гравитацию к скорости (которая также является CGPoint).

-(void) update:(ccTime)delta
{
   // use a gravity velocity that "feels good" for your app
   const CGPoint gravity = CGPointMake(0, -0.2);

   // update velocity with gravitational influence
   velocity.y += gravity.y;

   // update sprite position with velocity
   CGPoint pos = sprite.position;
   pos.y += velocity.y;
   sprite.position = pos;
}

Это дает эффект скорости со временем, увеличивается в направлении вниз y.Это заставит объект ускоряться быстрее и быстрее вниз, чем дольше он «падает».

Тем не менее, изменяя скорость, вы все равно можете изменить общее направление объекта.Например, чтобы сделать прыжок персонажа, вы можете установить velocity.y = 2.0, и он будет двигаться вверх и снова падать из-за эффекта гравитации, применяемого со временем.

Это все еще упрощенный подход, но очень распространенный в играхкоторые не используют "настоящий" физический движок.

...