【发布时间】:2016-06-28 22:19:21
【问题描述】:
我有一个基于图块的等距世界,我可以使用以下计算来计算哪个图块位于特定(鼠标)坐标下方:
function isoTo2D(pt:Point):Point{
var tempPt:Point = new Point(0, 0);
tempPt.x = (2 * pt.y + pt.x) / 2;
tempPt.y = (2 * pt.y - pt.x) / 2;
return(tempPt);
}
function getTileCoordinates(pt:Point, tileHeight:Number):Point{
var tempPt:Point = new Point(0, 0);
tempPt.x = Math.floor(pt.x / tileHeight);
tempPt.y = Math.floor(pt.y / tileHeight);
return(tempPt);
}
(取自http://gamedevelopment.tutsplus.com/tutorials/creating-isometric-worlds-a-primer-for-game-developers--gamedev-6511,这是一个flash实现但数学是一样的)
在这些情况下,由于某些标高较高的图块的高度,后面的图块(或部分图块)被遮盖了,不应该被鼠标选中,而是选择了在它的前面。 考虑到瓷砖的高程,如何通过鼠标坐标计算瓷砖?
我正在使用 javascript 和画布实现。
【问题讨论】:
-
好吧,您的瓷砖位于 3D 平面上,而您的鼠标位于 2D 平面上,因此您可能需要使用您正在查看瓷砖的角度进行一些线性代数投影。跨度>
-
我没有使用 3d 平面 - 这是一个模仿 3d 平面的 2d 平面
-
模仿部分很重要。假装你可以“旋转”你的世界。然后你就能看到不同的瓷砖,对吧?向上倾斜角度,以便您直视下方?然后您可以轻松找到鼠标所在的磁贴。因此,您要么考虑倾斜和旋转角度,要么考虑一些用于鼠标进入和离开事件的边界框侦听器,或者完全放弃鼠标,只使用键盘选择一个图块。
标签: javascript isometric