重力は、物理ステップごとに体に適用される一定の速度に他なりません。次の更新方法の例を見てください。
-(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
、時間の経過とともに適用される重力の影響により、上に移動して再び下に戻るように設定できます。
これはまだ単純化されたアプローチですが、「実際の」物理エンジンを使用しないゲームでは非常に一般的です。