我最近在写一个非常简单的2D物理引擎,大概就是支持球和球、球和墙壁的弹性碰撞,但是目前遇到了几个问题。先说下我的实现方法吧。每个球记录下 (pos, vel, acc)
三个向量,然后每一帧 vel += acc; pos += vel;
。碰撞的话,发现两个物体重叠,就用弹性碰撞的公式重新计算物体的速度向量。目前加速度还取的是0。
现在遇到了三个问题:
两个球相撞的时候,有可能会纠缠在一起。这个原因我还是知道的,万一下一帧的时候球依然重叠,那么就会再一次重新计算速度向量,于是乎就纠缠在一起了。我试过打一个标记,表示这个球刚刚撞完,然后等这个球不和别的物体重叠了之后,再把这个标记清除掉。然而这样做的话,在几个球相撞的时候就会出问题。
还有,有的球撞着撞着速度变快了之后,直接从墙壁穿出去了……
另外,我对加上一个重力场表示很疑惑,不知道怎么实现。我尝试设置每个球的加速度向量,然后出现了两个严重的问题。一是球跳起来的高度越来越低,最后就贴在下边界上了。二是球贴在下边界上之后,速度依然会增加,于是当速度足够大的时候就飞出下边界了。我在想是不是应该引入力的表示??
我实在是没有游戏编程的经验,求各位前辈指点一下,说说这些情况怎么解决,或者是应该看看什么资料?谢谢!
btw 目前的失败演示: http://lab.abcdabcd987.com/playground/bouncing_air2/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.