首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏物理-不太像生活

游戏物理-不太像生活
EN

Stack Overflow用户
提问于 2012-12-19 23:51:19
回答 2查看 328关注 0票数 0

在一个简单的游戏(cocos2d)中,我有一个小型的物理引擎来移动一个精灵,这样它就可以跳下去,站在平台上等等。

为了更新位置(垂直运动),我在每次更新中使用基本的运动学方程:

  • 位置= oldPosition +速度(δ)+1/2(重力)(δ)^2
  • 速度= oldVelocity +(重力)(δ)

由于某种原因,这个游戏看起来不太像生活。它似乎需要很长的时间接近一个弧线的顶部,尽管我有多么伟大的重力。如果我想让我的雪碧跳到同样的高度,但是减速和加速更快,但仍然像以前那样跳得那么高,那我该怎么做呢?我希望这是有意义的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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*ts = s_last + v*t --盒子完全像预期的那样落下,并正确地反弹。由于简化,能量在弹跳中丢失。

票数 1
EN

Stack Overflow用户

发布于 2012-12-20 01:03:30

你可能更喜欢在你的cocos2d-iphone游戏中试用Box2d或花栗鼠物理引擎,以获得更像生活的效果。另外,它们相对容易实现。

不需要制造你自己的物理系统--记住让技术为你工作;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13963160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档