Monogame - 加载方块

Monogame - Loading Tiles

我在将一些图块加载到我的游戏时遇到了一些问题。我的游戏世界目前的像素大小为 770x450。我在位置 (0, 330) 加载了一个图块,但是我想制作一个循环,沿 x 轴复制并加载图块,直到它到达 (770, 330)。我可以简单地复制代码并粘贴代码以分别加载每个图块,但那将是错误的代码。

这是我当前的 Initialize() 代码:

protected override void Initialize()
{
    position = new Vector2(0, 330);

    // x axis = 770 pixel 
    // y axis = 450 pixels

    this.IsMouseVisible = true;
    base.Initialize();
}

我的图块声明为 Texture2D gameTile;

http://xnaresources.com/default.asp?page=Tutorial:TileEngineSeries:1

link 提供的教程涵盖了创建磁贴引擎所需的大部分内容。

您似乎是在 Applications Initialize 函数中创建磁贴。您最好创建某种类型的磁贴管理器来存储您需要的所有磁贴。

就创建图块而言,您可以使用结构数组或数组结构。对于第一个,您将创建一个至少存储图块位置的图块 class。如果使用 spritesheet 来渲染图块,您还可以包含一个 TileID 来确定应该使用哪个图块来绘制。

对于数组结构,您可以存储将用于图块的向量数组(在图块管理器中)和另一个 TileID 数组。两种方法都有效。为了可读性和练习面向对象编程,我可能会为您推荐第一个。

Texture2D 也应该只加载一次。您没有 post 在何处加载或计划如何制作更多图块,因此我假设您的计划是为每个图块加载 texture2D,这将是一个坏主意。

最后,在循环方面,一旦你制作了瓷砖 class,你的瓷砖管理器或初始化函数将循环创建并设置每个瓷砖的位置(伪代码):

int tileRowCount = mapSizeX / tileSizeX;
int tileColumnCount = mapSizeY / tileSizeY;

for(int rowIndex = 0; rowIndex < tileRowCount; rowIndex++)
{
    for(int columnIndex = 0; columnIndex < tileColumnCount; columnIndex++)
    {
        tileList.Add(new Tile(new Vector2(columnIndex * tileSizeX, rowIndex * tileSizeY);
    }
}

然后画图:

foreach(Tile tile in tileList)
{
    ///not exact Draw call, not looking at the documents right now
    tile.Draw(spriteBatch, tileTexture, tile.Position);
}

这就是我认为您所追求的要点。如果我走错了路,请告诉我我会调整答案。我确实跳过了一些更具体的细节,但如果您有任何问题,可以在 link 中询问更多。

已编辑:绘图部分不是代码格式