我正在编写一个等距游戏,但不幸的是,我一直坚持使用用于从屏幕坐标映射回世界坐标的算法(反之亦然)。无论如何,我无法弄清楚与我的 GetScreenX/Y 方法相反的实现。这是一些代码。width 和 height 表示图块中视口区域的宽度/高度。
通过正确的实现,这应该可以顺利进行。您可以在 Linqpad 中运行它。
void Main()
{
for(int width = 1;width<15;width++)
{
for(int height = 1;height<10;height++)
{
for(int x = -50;x<50;x++){
for(int y = -50;y<50;y++){
var screenX = GetScreenX(x, y, width, height);
var screenY = GetScreenY(x, y, width, height);
var worldX = GetWorldX(screenX, screenY, width, height);
var worldY = GetWorldY(screenX, screenY, width, height);
if (worldX != x || worldY != y)
{
throw new Exception("Algorithm not right!");
}
}
}
}
}
}
protected int GetScreenX(int x, int y, int width, int height)
{
return WrappingMod(x + y, width);
}
protected int GetWorldX(int x, int y, int width, int height)
{
return 1; //needs correct implementation
}
protected int GetWorldY(int x, int y, int width, int height)
{
return 1; //needs correct implementation
}
protected int GetScreenY(int x, int y, int width, int height)
{
return WrappingMod((int) ((y - x)/2.0), height);
}
static int WrappingMod(int x, int m)
{
return (x % m + m) % m;
}
很抱歉不得不问,但我无能为力!