【发布时间】:2017-02-05 09:21:04
【问题描述】:
我正在使用菱形图案生成等距平铺地图:
tileWidth = 128;
tileHeight = 94;
for (var x = 0; x < rows; x++) {
for (var y = 0; y < cols; y++) {
var screenX = (x - y) * tileWidthHalf;
var screenY = (x + y) * tileHeightHalf;
drawTile(screenX, screenY);
}
}
这可以正确渲染,但现在我无法将屏幕坐标(鼠标位置)转换回等距坐标。
我尝试过反转数学:
var x = _.floor(screenY / (tileWidth / 2) - (screenX / tileWidth / 2));
var y = _.floor(screenY / (tileHeight / 2) + (screenX / tileHeight / 2));
它适用于0, 0 磁贴,但之后无法产生正确的值。
我只是无法提出正确的数学 - 我错过了一些微不足道的事情还是我对这个过程完全错了?
【问题讨论】:
-
未来访问者:Nico 的解决方案(公认的解决方案)是互联网上找到的许多不同解决方案中唯一适合我的解决方案。我正在关注文章clintbellanger.net/articles/isometric_math - 您必须按照 Nico 的回答中的建议将 screenX 替换为 (screenX - tileWidthHalf)。请参阅我在 Nico 的回答中的评论。一定要降低结果。
-
Nico 的解决方案是正确的,但请记住,screenx、screeny、tileWidthHalf 和 tileHeightHalf 必须使用 FLOATS,否则精度不够。我正在使用整数,但它无法正常工作。将这些更改为浮点数,并且效果很好。
标签: javascript math game-engine pixi.js