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

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

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

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

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

Спасибо!


person SimplyKiwi    schedule 15.11.2011    source источник
comment
Я добавлю награду, если это необходимо!   -  person SimplyKiwi    schedule 15.11.2011


Ответы (1)


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

-(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, и он будет двигаться вверх и снова опускаться из-за эффекта гравитации, применяемого с течением времени.

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

person LearnCocos2D    schedule 15.11.2011
comment
Я понимаю. Я до сих пор не понимаю, что устанавливает значение velocity.y. Похоже, что в этом примере всегда будет 0! Также еще одна вещь, я установил положение моего спрайта в моем методе UIAccelerometer. Итак, я должен сделать это в своем методе UIAccelerometer, а если нет, как мне установить только позицию X моего CCSprite в моем методе UIAccelerometer? Спасибо за вашу помощь. Как только вы ответите на эти вопросы, проголосуйте и примите участие! - person SimplyKiwi; 16.11.2011
comment
Я понял, что Velocity.y на самом деле не равен 0. Во всяком случае, я поместил это в свой метод UIAccelerometer, это нормально? - person SimplyKiwi; 16.11.2011
comment
Это дает четкое представление о том, как работает гравитация в Cocos2d. Я разместил вопрос по адресу stackoverflow.com/questions/31492803/, но я думаю, что могу решить эту проблему с помощью ручного обновления скорости. Спасибо @LearnCocos2D - person Paresh Thakor; 20.07.2015