这几周一直困扰着我。在这段时间里,我上网搜寻了答案,甚至去Borders的电脑书籍区域阅读书籍,但没有太多运气。
我编写了一个2D关卡编辑器,用于侧向滚动视频游戏。现在我想把它变成一个游戏,让玩家可以奔跑和跳跃来探索关卡,就像“马里奥”一样。
真正困扰我的事情是碰撞响应(不是检测:我已经知道如何判断两个块是否碰撞)。下面是一些场景,我将详细说明这些问题(阴影块表示地面,箭头表示玩家的速度向量,虚线是玩家的预期路径)。
请查看这个碰撞响应示例图:
http://dl.dropbox.com/u/12556943/collision_detection.jpg
假设场景(1)和(2)中的速度向量相等(方向和大小相同)。然而,在场景(1)中,玩家撞到了方块的侧面,在场景(2)中,玩家着陆在方块顶部。这让我得出结论:确定碰撞响应不仅取决于玩家的速度向量,还取决于玩家与碰撞块的相对位置。这引出了我的第一个问题:如何从玩家的速度向量和相对位置中确定玩家是从哪个方向(左侧、右侧、顶部或底部)与块发生碰撞?
另一个问题是,如果玩家在同一帧内与多个方块碰撞,我该如何确定碰撞响应。例如,在情况(3)中,假设玩家同时与这两个方块发生碰撞。我假设我需要循环遍历玩家正在发生碰撞的每个方块,并从每个方块相应地调整反应。总结一下,这是我的第二个问题:如果玩家与多个方块发生碰撞,我该如何处理碰撞响应?
请注意,我从未透露过我使用的编程语言;这是因为我更喜欢伪代码而不是特定于某种语言的代码。
谢谢!