在一个简单的游戏(cocos2d)中,我有一个小型的物理引擎来移动一个精灵,这样它就可以跳下去,站在平台上等等。
为了更新位置(垂直运动),我在每次更新中使用基本的运动学方程:
由于某种原因,这个游戏看起来不太像生活。它似乎需要很长的时间接近一个弧线的顶部,尽管我有多么伟大的重力。如果我想让我的雪碧跳到同样的高度,但是减速和加速更快,但仍然像以前那样跳得那么高,那我该怎么做呢?我希望这是有意义的。
发布于 2012-12-29 21:27:56
问题是你在物理上犯了一个错误!但这没什么,因为这是一个简单的解决办法。
在对sprite的位置调用update方法时,首先应该设置加速。我假设重力是这个游戏的常数,所以你只需要设定一次。(-9.81,或类似的东西)
然后,您想要通过速度= old_velocity +加速度*时间来更新y方向上字符的速度。
完成此操作后,您将以类似的方式更新该位置: position = old_position +速度表* time。
您使用的更新位置的等式只有在增量是经过的总时间,而不是时间步骤时才有效!(我认为delta是一个时间步骤,因为物理游戏通常是这样编程的。)
我希望这能帮到你!如果你想知道更多,看看苏瓦特方程,你会发现,如果你知道一个初始速度和一个恒定的加速度,你就可以计算出一个最后的位置,因为你的游戏的速度会随着跳跃和碰撞而变化,所以这并不奇怪,因为它是不现实的!任何问题,只要评论,我会尽力帮助你进一步。
编辑:我用一些用OpenGL绘制的框重新编程了你在这里所做的事情。您更新职位的方法似乎不起作用。只有当dt或时间步长为1.0d时,方框才会正确下降,我不知道为什么。然后,当它们与某物相撞时,它们就会停在一起,而不是弹跳。我不知道确切的原因。
然而,我在屏幕上还有另一个盒子,它使用了我描述的物理原理:v = u + a*t和s = s_last + v*t --盒子完全像预期的那样落下,并正确地反弹。由于简化,能量在弹跳中丢失。
发布于 2012-12-20 01:03:30
你可能更喜欢在你的cocos2d-iphone游戏中试用Box2d或花栗鼠物理引擎,以获得更像生活的效果。另外,它们相对容易实现。
不需要制造你自己的物理系统--记住让技术为你工作;
https://stackoverflow.com/questions/13963160
复制相似问题