Гравитация - это не что иное, как постоянная скорость, применяемая к телу на каждом физическом шаге.Посмотрите на этот примерный метод обновления:
-(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
, и он будет двигаться вверх и снова падать из-за эффекта гравитации, применяемого со временем.
Это все еще упрощенный подход, но очень распространенный в играхкоторые не используют "настоящий" физический движок.