我正在编写一个游戏,其中包含可以移动的二维瓷砖板。物理引擎正在处理运动,但在运动结束时,我试图将图块捕捉到网格。
现在坚持!在大多数情况下,我已经正确地捕捉到网格。我只是使用模数的形式(通过重复加上比较)从正方形的位置计算行和列,并确定每个图块的中心在网格中的位置。
这是困难的部分。有"边缘情况" (字面意思)哪里可以有两个瓷砖,最终在同一个方格。这是因为切片比正方形稍微小一些,所以如果你移动一个刚好越过边缘线,下一个被推动但不足以通过边缘线,所以最终得到两个属于同一网格的正方形
在极端情况下,存在更难的问题。
取这个网格,其中X是图块的中心。
_______
| |X| | |
| |X| | |
| |X|X| |
|_|X|_|_|
现在假设它在移动结束时看起来像这样(其中X是"在线上")
_______
| X | | |
| X | | |
| X X | |
|_X_|_|_|
你可以看到,不仅两个方格属于第三行和第二列,而且你不能只是"推"瓷砖在一个方向或另一个方向不计数,检查等。
如果你想象一个像这样的网格(所有的瓷砖都在线上,你会发现这可能会失控。
_______
| X X X |
| X X X |
| X X X |
|_X_X_X_|
想法?
修改
这是一个现实而常见的案例:
_______
| |X| | |
| |X| | |
| X X | |
|_|X|_|_|
现在,两个都抓到同一列,留下一个"挤压"我们试图将5个瓷砖分成4行列的情况......