Rob*_*Rob 11 2d collision-detection game-engine
这在过去的几周里一直困扰着我.在这段时间里,我一直在网上进行研究,甚至在Borders的计算机部分读书,试图找到答案,但我没有太多运气.
我为侧卷轴视频游戏编写了2D级编辑器.现在我想把它变成一个游戏,我有一个可以跑步和跳跃探索关卡的玩家,类似于"马里奥".
真正给我带来麻烦的是碰撞响应(不是检测:我已经知道如何判断两个块是否发生碰撞).以下是我将要说明的一些场景,以便您可以看到我的问题(阴影块是地面,箭头是玩家的速度矢量,虚线是玩家的投影路径).
查看此碰撞响应方案图像:
http://dl.dropbox.com/u/12556943/collision_detection.jpg
假设情景(1)和(2)中的速度矢量相等(相同的方向和幅度).然而,在场景(1)中,玩家正在击中该区块的一侧,并且在场景(2)中,该玩家落在该区块的顶部.这使我得出结论,确定碰撞响应不仅取决于玩家的速度矢量,还取决于玩家相对于碰撞块的相对位置.这引出了我的第一个问题:知道速度矢量和玩家的相对位置,我如何确定玩家与该块碰撞的方向(左侧,右侧,顶部或底部)?
我遇到的另一个问题是如果玩家与同一帧中的多个块发生碰撞,如何确定碰撞响应.例如,假设在场景(3)中,玩家同时与这两个块碰撞.我假设我将不得不遍历玩家正在碰撞的每个区块并相应地调整每个区块的反应.总结一下,这是我的第二个问题:如果玩家与多个块碰撞,我该如何处理碰撞响应?
请注意,我从未透露过我正在编程的语言; 这是因为我更喜欢你不知道(不过是个人的,但是:).我对伪代码比对特定语言代码更感兴趣.
谢谢!
cha*_*ian 11
我认为XNA的示例平台游戏处理冲突的方式可能对您有用.我在Stack Overflow上的其他地方发布了一个非常类似的问题的答案,但也会在这里转发它.
if(abs(overlap.y) < abs(overlap.x)) { position.y += overlap.y; } else { position.x += overlap.x; }这种逻辑的XNA版本是player.cs在HandleCollisions()如果你有兴趣在抢夺他们的代码,看看他们具体做有功能.
| 归档时间: |
|
| 查看次数: |
10533 次 |
| 最近记录: |