【发布时间】:2009-08-19 19:19:26
【问题描述】:
我正在编写一个等距游戏,但不幸的是,我在编写用于从屏幕坐标映射回世界坐标的算法时遇到了困难(反之亦然)。无论如何,我无法弄清楚与我的 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;
}
很抱歉不得不问,但我无能为力!
【问题讨论】:
标签: isometric