Cocos2D逼真的重力?

时间:2012-07-14 06:26:05

标签: ios cocos2d-iphone gravity

我尝试了许多不同的技术,在我的游戏中应用逼真的重力特征但到目前为止没有运气。我打算为此人提供一个 100点赏金给那些可以向我展示或(分享)一些将重力应用于Cocos2D中的CCSprite的代码。

到目前为止,我所做的只是丑陋或不切实际,我曾在许多不同的地方询问最佳方法是什么,但我还没有找到任何好看的重力技术。

无论如何,任何人都可以提供一些提示/想法或他们的方法,只在Cocos2D 使用物理引擎将重力应用于CCSprite?

谢谢!

2 个答案:

答案 0 :(得分:5)

无需明确使用任何物理引擎的有效方法是在更新循环中手动调整精灵的速度和位置。这基本上是欧拉整合。

// define your gravity value
#define GRAVITY -0.1

// define a velocity variable in the header of your Game class/CCSprite Subclass (neater)
float velocity_y;

-(void) update: (ccTime) dt
{
    // Step the y-velocity by your acceleration value (gravity value in this case)
    velocity_y += GRAVITY *dt; // drop the dt if you don't want to use it 

    // Step the position values and update the sprite position accordingly
    sprite.position.y += velocity_y* dt; // same here
}

在上面的代码片段中,我定义了一个velocity_y变量来跟踪我的精灵沿y方向的当前速度。请记住在init方法中将此值初始化为0.

接下来是欧拉的关键。每一步都是:

  1. 通过加速度(这是你的引力)乘以dt来提高你的速度,以找到你的新速度。
  2. 按您新计算的速度值乘以dt推进您的位置以找到您的新位置。
  3. 您可以尝试是否使用delta-time(参见LearnCocos2D对使用它的优点的优秀评论)适用于您的游戏。虽然乘以delta时间可以让你的对象运动更准确地考虑到不同的帧速率,正如LearnCocos2d指出的那样,避免在系统中断的实时游戏中使用它(新邮件,低电量,广告流行)可能是明智的-out)可以发生并随后使游戏模拟向前跳跃以试图弥补。

    因此,如果您要删除dt,请记住相应地调整(缩小)GRAVITY值以保持正确的感觉,因为此值不再乘以delta-time的值(约为1/60)

    Aditional提示:要应用一个脉冲来移动精灵(比如通过滑动),你可以通过改变velocity_x(如果有的话)和velocity_y的值来直接影响速度。

    我在游戏中使用过这种方法,效果非常好。希望它有所帮助。

答案 1 :(得分:0)

这不是一件小事,你应该试着看看其他帖子。我相信其他人已经有过这个问题了。试着看看:

或者试试我们的好朋友谷歌:

无论如何,这里有一些提示:

步骤1,计算有效方向向量 第2步,计算速度 步骤3,将此速度投射到两个有效方向。 步骤4,为两个方向产生相等且相反的力,并将其称为“响应力”。