我有一个基于图块的游戏,我需要在32px
半径范围内找到最近的图块。因此,假设用户位于400, 200
,用户点击500, 400
。我需要在点击时创建从玩家到鼠标位置的路径或线,并且必须选择32px
(或2个图块)内的路径下面的最近的图块。地图在16px
平铺。
可以使用函数调用来查看图块是否位于给定图块位置Map.at(x,y)
。
我只是不知道用来解决这个问题的数学。
块块在16px内,红色在32px内。灰色块是要销毁的区块,蓝线是玩家和鼠标之间的不可见路径。
答案 0 :(得分:1)
如果你按照图块坐标工作,问题会变成一个线条绘制问题,从用户所在的标题到单击鼠标的图块。线条绘制算法将按顺序生成所有图块这两块瓷砖之间的直线路径。只需选择Map.at(x,y)满足您要求的第一个并退出行抽屉。
存在许多线条绘制算法。两个简单的是DDA和Bresenham's。两者都以正确的顺序生成离散的“像素”(问题中的图块)。如果可以在您的应用程序中使用浮点运算,则DDA是一个简单的选择。 Bresenham只使用整数数学。
答案 1 :(得分:0)
有很多游戏,不一定是直线,而是搜索最短的路径。如果您正在前往那里,那么您可能需要查看the A* algorithm。