1

我目前正在使用 MonoGame 开发一个自上而下的游戏,该游戏使用图块来指示位置是否可步行。瓷砖的大小为 32x32(图像也有)

一个 200 x 200 的网格正在填充墙砖(并且应该使用随机生成器创建路径和房间),但是当我在屏幕上绘制所有瓷砖时,很多瓷砖都不见了。下面是一个图像,在位置 (x81 y183) 之后,瓷砖根本没有绘制?

http://puu.sh/3JOUO.png

用于填充数组的代码将墙砖放在网格上,砖的位置是它的数组位置乘以父用于相机位置的砖大小(32x32)

    public override void Fill(IResourceContainer resourceContainer)
    {
        for (int i = 0; i < width; i++)
            for (int j = 0; j < height; j++)
            {
                objectGrid[i, j] = new Wall(resourceContainer);
                objectGrid[i, j].Parent = this;
                objectGrid[i, j].Position = new Vector2(i * TileWidth, j * TileHeight);
            }
    }

绘制时,我只是遍历所有图块并相应地绘制它们。这就是 Game.Draw 函数中发生的事情

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.Yellow);

        // TODO: Add your drawing code here
        spriteBatch.Begin();
        map.Draw(gameTime, spriteBatch);

        spriteBatch.End();
        base.Draw(gameTime);
    }

map.draw 函数调用这个函数,它基本上绘制每个图块。我尝试设置一个计数器来计算每个图块的绘制调用被命中的次数,每次更新绘制函数被调用 40000 次,这是我使用的图块数量。所以它把它们都画了,但我仍然没有在屏幕上看到它们

    public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {
        for (int i = 0; i < width; i++)
            for (int j = 0; j < height; j++)
            {
                if (objectGrid[i, j] != null)
                {
                    objectGrid[i, j].Draw(gameTime, spriteBatch);
                }
            }
    }

这是绘制瓷砖的代码。当前图像始终为 0 并且GlobalPosition是图块的位置减去相机位置

    public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
    {
        if (visible)
            spriteBatch.Draw(textures[currentImage], GlobalPosition, null, color, 0f, -Center, 1f, SpriteEffects.None, 0f);
    }

我为代码墙道歉。对我来说这一切看起来都很简单,但我似乎无法找出为什么它没有绘制所有的瓷砖。对于未绘制的瓷砖可见仍然是真实的,并且currentImage是 0 它应该是

4

1 回答 1

1

在绘制大量 16 位图像时,monogame spritebatch 仍然存在一些错误和错误。就我而言,大约 200.000 这不是您可以轻松解决的问题。如果您遇到同样的问题,请确保您绘制的每张图像都在屏幕上,这样您可能就不会再遇到问题了。

于 2013-07-26T14:12:00.703 回答