我编写了一些代码,可以让任意大小的矩形与基于网格的地形设置相撞(对于平台游戏)。我这样做是这样的:
For each tile the rectangle intersects with, do:
Calculate the primary axis that this tile is on with respect to the rectangle
Calculate the interpenetration of this tile into the rectangle along the primary axis (factoring in previous position offsets from other tiles)
If this tile is solid, add that interpenetration to a total collision resolution vector
Adjust the rectangle's position by the total calculated collision resolution vector
哪个工作得很好,除了我遇到随机的“挂机”,因为我的矩形被拉到两个瓷砖边框的地面上,我的代码决定它需要通过推动解决与这个新瓷砖的碰撞它在X轴上,因此停止矩形的运动,除非它被手动推出地形以克服它。
我试过一次只解决一个轴上的碰撞(所以如果Y轴分辨率最大则忽略任何x轴碰撞分辨率,反之亦然),但是当按下矩形时会导致抖动进入一个角落(因为这是一个实际上需要同时解决两个轴的情况)。
简而言之,我可以用什么方法一次解决这两个问题?
答案 0 :(得分:0)
这是一个非常难的问题,因为在某些情况下它会有无限的相互作用。
在速度和准确度之间进行选择:
1.add每个对象的交互计数器(矩形)
2.如果任何碰撞检测到碰撞中所有物体的增量计数器
3.如果计数器值超过限制值,则停止计算该对象的交互
请注意,如果被迫但不会挂断,这种方法也会造成一些打嗝。