4

我真的很想尝试在我的比赛中加入重力。我知道每个人都说使用 Box2D,但就我而言,我不能。需要使用 Cocos2D 作为重力。

我知道 Cocos2D 没有内置任何重力 API,所以我需要手动做一些事情。问题是网络上没有任何教程或示例可以显示这一点。

任何人都可以告诉我他们做了什么,或者可以逐步解释如何应用非常量重力(下降时会变得稍微强一些)。

我认为这将帮助很多面临与我相同问题的人!

谢谢!

4

1 回答 1

12

重力只不过是在每个物理步骤中应用于身体的恒定速度。看看这个示例更新方法:

-(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它会向上移动并由于随着时间的推移施加的重力效应而再次下降。

这仍然是一种简化的方法,但在不使用“真实”物理引擎的游戏中非常常见。

于 2011-11-15T14:01:49.927 回答