ios - Cocos2D 现实重力?

标签 ios cocos2d-iphone gravity

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

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

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

谢谢!

最佳答案

无需显式使用任何物理引擎的有效方法是在更新循环中手动步进 Sprite 的速度和位置。这本质上是欧拉积分。

// 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 变量来跟踪我的 Sprite 沿y 方向的当前速度。请记住在您的 init 方法中将此值初始化为 0。

接下来是欧拉的症结所在。在每个时间步:
  • 将你的速度乘以你的加速度(这是你的重力)乘以 dt 来找到你的新速度。
  • 通过新计算的速度值乘以 dt 来推进你的位置,以找到你的新位置。

  • 您可以试验是否使用 delta-time(请参阅 LearnCocos2D 关于使用它的缺点的出色评论)是否适用于您的游戏。正如 LearnCocos2d 指出的那样,虽然乘以 delta-time 可以让您的对象运动更准确地考虑变化的帧速率,但避免在系统中断(新邮件、电池电量不足、广告弹出)的实时游戏中使用它可能是明智之举-out) 可能发生并随后导致游戏模拟向前跳跃以试图弥补。

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

    附加提示:要应用脉冲来移动 Sprite (例如通过滑动),您可以通过更改velocity_x(如果有的话)和velocity_y 的值直接影响速度。

    我在我的游戏中使用了这种方法,并且效果很好。希望能帮助到你。

    关于ios - Cocos2D 现实重力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11481591/

    相关文章:

    ios - 退化的顶点和 GL_LINE_STRIP

    android - Eclipse 显示所有 android 布局项,因为它们具有重力 "right"

    ios - 如何检测 Swift 2 的 UITextField 上的点击?

    iphone - Sprite 突然消失 Cocos2d

    android - React native - 在上传到服务器之前压缩视频的最佳方法是什么?

    javascript - 如何使用 Cocos2D 制作 HTML5 Canvas 整页大小

    java - Android进度对话框不在中间而是在底部

    android - 如何将文本设置在 TextView 的中心

    ios - 单个 HTTP 请求中的双请求 header

    iOS 7 - 核心数据迁移 - Xcode 5