【问题标题】:Monogame - Loading TilesMonogame - 加载瓷砖
【发布时间】:2016-04-10 19:44:06
【问题描述】:

我在将一些图块加载到我的游戏时遇到了一些问题。我的游戏世界目前的像素大小为 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;

【问题讨论】:

    标签: c# xna monogame


    【解决方案1】:

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

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

    看起来您正在应用程序初始化函数中创建图块。您最好创建某种磁贴管理器来存储您需要的所有磁贴。

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

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

    Texture2D 也应该只加载一次。您没有发布加载位置或计划如何制作更多图块,因此我假设您的计划是为每个图块加载纹理 2D,这将是一个坏主意。

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

    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);
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2016-12-14
      • 2018-05-28
      • 2016-10-11
      • 2014-08-12
      • 1970-01-01
      相关资源
      最近更新 更多