我尝试了许多不同的技术来在我的游戏中应用逼真的重力功能,但到目前为止都没有运气。我计划为此提供 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。
接下来是欧拉的症结所在。在每个时间步:
您可以试验是否使用 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/