我正在用CodeSkulptor(python2)编写一个简单的空气曲棍球风格的游戏。3圈,基本上是两个桨和一个球。我知道如何检测圆之间的碰撞,但我发现很难精确地模拟出圆如何从用户控制的圆上反弹。用户控制的圆圈(桨叶)倾向于消耗球,球会卡住。我认为我的球从墙上反弹的代码和我为划桨碰撞编写的代码几乎相同。在
我读了一些其他的文章,我发现我需要得到碰撞点,然后以某种方式把它转换成一个向量来更新球的位置。有人能帮我吗?另外,桨叶是由用户控制的这一事实是否会使事情变得复杂?我猜对球的影响也要考虑到球拍的矢量?在
谢谢你的回复,请尽量简化数学。在
克里斯
Tags:
解决方案1
适合我和任意形状的算法是
这样你就不会被卡住,如果另一部分同时不动。因为向后移动后,你不会重叠,也不会触发反弹和改变方向两次。在
解决方案2
只使用矢量和圆:
改变方向
计算新的方向可以忽略两个圆的速度,但这看起来不太自然。在
^{pr2}$但是你可以使用这个新方向和旧方向来创建一个看起来更自然的新方向。我没有测试这个,但它应该看起来像这样:
组合方向=旧方向+2*(旧方向dot-product新方向)*新方向
点积给出了投影到某个向量上的方向。在
同样,一旦你得到了这个,你就可以考虑到圆有多重而产生弹性碰撞:http://en.wikipedia.org/wiki/Collision
相关问题 更多 >
编程相关推荐