如何计算等距世界中鼠标下方的图块索引,同时考虑图块高程

use*_*553 8 javascript isometric

我有一个基于图块的等距世界,我可以通过使用以下计算来计算特定(鼠标)坐标下面的哪个图块:

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);
}
Run Code Online (Sandbox Code Playgroud)

(摘自http://gamedevelopment.tutsplus.com/tutorials/creating-isometric-worlds-a-primer-for-game-developers--gamedev-6511,这是一个flash实现,但数学是相同的)

但是,当我的瓷砖具有不同的高程水平时,我的问题就出现了: 在此输入图像描述

在此输入图像描述

在这些情况下,由于一些具有较高高度的瓷砖的高度,后面的瓷砖(或瓷砖的一部分)被遮盖并且不应该由鼠标选择,而是选择前面的瓷砖它的.如何在考虑到瓷砖高度的情况下通过鼠标坐标计算瓷砖?

我正在使用javascript和canvas实现.

Cha*_*iam -2

奇怪的是,答案写在维基百科页面标题为“将屏幕映射到世界坐标”的部分中。不要尝试描述图形,只需阅读该部分三遍即可。

您需要准确确定您正在使用哪种同构投影,通常是通过用尺子测量屏幕上的图块大小来确定。

  • 如果我正确理解这篇文章,这正是我用来计算图块位置的方法。但是,当某些图块具有更高的标高时,我的问题就出现了,并且图块的侧面以及图块本身必须可以通过鼠标选择,并且如果后面的图块隐藏在后面,则不应选择它其他。 (2认同)