在使用unity构建我的2D游戏时,我开始使用以下代码索引我的tile坐标以便在字典中访问:
Public class Coordinate
{
private short[] coordinate = new Int16[2];
public Coordinate(In16 x, Int16 y)[...]
public Int16 x {[...]}
public Int16 y {[...]}
public Int32 Key
{
get{
return ((Int32)(y << 16) ^ x);
}
}
public static void Coordinate(Coordinate coordinate, Int32 index)
{
coordinate.X = (Int16)(index >> 16);
coordinate.y = (Int16)index;
}
}
但最终我发现了一个非常简单的解决方案:
int index = y * mapWidth + x;
和
int x = index % mapWidth;
int y = index / mapWidth;
我的问题是: 这两种方法中的任何一种方法对于在不同平台上移植是否更安全,或者只是更好的做法?如果是,想知道具体细节。
答案 0 :(得分:0)
使用Lsl或lsr不是一个好习惯,因为即使它比其他解决方案更快,每个人都不理解它是如何工作的。
分区是最糟糕的解决方案,因为它对计算机来说并不自然,它们可能需要花费很多时间(是的,不到1毫秒,但是时间太长)。想象一下,如果你有一个等于0的map。
我不知道模数,但我认为这不是一个糟糕的解决方案。
乘法可能是最好的解决方案,也可能是最差的解决方案。它取决于数量(2 ^ x =最佳解,(2 ^ x)-1 =最差解(我认为这适合于臂组装) 它就像乘以3.在汇编中你应该乘以2并加上数字。 x * 3 = x * 2 + x。对于人类来说,它是相同的,而不是计算机。 也许编译器会进行转换,因为它们比过去更聪明。
在这种情况下,我认为乘法是最好的解决方案。只需更改&lt;&lt;通过基本乘法(2 ^ 16,所以65536)
我不知道你想用你的代码做什么,但根据评论你应该将索引分成2个变量。 因此,vector2是一个很好的解决方案,很容易管理,所以这是一个很好的实践。
对不起,我的英语很差。如果你不明白的话告诉我,我会再试一次:)
度过愉快的一天