我试图编写一个函数来返回tileset上tile的位置。
我为此编写了一些代码,但这似乎不必要地复杂。
每个瓷砖的编号如何:
// My old code:
function getXPosByNumber(width, height, tilesize, tilenumber) {
if ((tilenumber % (width / tilesize) - 1) < 0) {
return width - tilesize;
} else {
return (tilenumber % (width / tilesize) - 1) * tilesize;
}
}
function getYPosByNumber(width, height, tilesize, tilenumber) {
return (Math.ceil(tilenumber / (width / tilesize)) - 1) * tilesize;
}
&#13;
如何使用更干净/更简单的代码访问任何tile coordonates?
感谢。
答案 0 :(得分:0)
如果这个tileset始终相同,我建议创建一种查找表。将存储每个图块编号的预先计算位置的对象。它会更加简单和快速,因为您只需要访问对象的属性。
答案 1 :(得分:0)
这是我想要简化的内容。我发现高度与计算X或Y无关。这里重要的因素是它在水平方向上传播的程度。
然后,由于特定的tileset更可能总是具有相同的宽度和tileize,我建议采用更“对象”的方法,这样您就不必经常记住它的配置。就个人而言,我喜欢包装常量和配置,以便我可以在之后编写轻量级代码:
var tileset = function(width, tilesize) {
this.width = width;
this.tilesize = tilesize;
};
// calculate X by tilenumber
tileset.prototype.getX = function(tilenumber) {
return (tilenumber % this.width - 1) * this.tilesize;
};
// calculate Y by tilenumber
tileset.prototype.getY = function(tilenumber) {
return Math.floor(tilenumber / this.width) * this.tilesize;
};
这允许你像这样使用它:
var mySet = new tileset(6, 10); // width=6, tilesize=10
var x = mySet.getX(16); // tilenumber=16
var y = mySet.getY(16); // tilenumber=16
要查看其效果,请查看此FIDDLE。
请注意,它会计算左上角的位置。如果需要,可以进行其他调整。
希望这有帮助!