0

我正在制作一个角色移动信使

(2d 瓷砖地图游戏寻找信使)

我希望每个图块都指向哪个字符。

简而言之,我的程序需要按字符的 x,y 坐标来引用字符。

我尝试让每个图块都有一个用于字符 obj 结构的空间。

这种方法的好处是每个字符都可以通过 x,y 坐标来引用

但是将角色从这里移动到那里非常困难。

将对象从这里复制到那里并删除原始xy坐标的对象

最后,将 obj 控制指针(用于控制)从原始 x,y 的对象更改为 dest x,y 的对象。

它不是那么直截了当,也不容易控制,也不是节省内存。

所以我考虑第二种方法。

有 tile 数组和 obj 数组。

渲染 obj 时,只需参考 obj 的 x,y。

当用户想要移动 obj 时,只需更改 x,y。

但是如果在引用 obj 时出现问题,

我必须搜索 obj 数组。

我的问题是这个。

有什么好的方法可以控制 2d 瓦片地图上的字符(obj)吗?

任何建议将不胜感激。

4

1 回答 1

1

您没有指定编程语言,因此我将在示例中使用 C#。

地图上存在的字符和其他对象通常存储在单独的列表中,而不是二维数组中。每个角色都会存储自己的 x 和 y 坐标。就像是:

class Character
{
    int x, y;

    public int X
    {
        get{ return x; }
        set{ x = value; }
    }

    public int Y
    {
        get{ return y; }
        set{ y = value; }
    }

}

你会将它们存储在一个列表中,例如:

List<Character> characters = new List<Character>();

如果你真的需要在特定的瓷砖上找到一个字符,你会做这样的事情(可能有一种 linq 方法可以在 1 行中做到这一点,但这更容易理解和阅读):

int searchX = 10;
int searchY = 15;
Character characterOnLocation = null;
foreach(Character character in characters)
{
    if(character.X == searchX && character.Y == searchY)
    {
        characterOnLocation = character;
        break;
    }
}

您的绘制方法应该循环遍历地形图块(可能已经这样做了),然后循环遍历字符数组并使用它们自己的 X 和 Y 坐标绘制它们。类似的东西(在这个例子中使用 XNA):

foreach(Character character in characters)
{
    spriteBatch.Draw(texture, character.X, character.Y);
}
于 2011-08-29T01:59:58.850 回答