我目前正在使用 MonoGame 开发一个自上而下的游戏,该游戏使用图块来指示位置是否可步行。瓷砖的大小为 32x32(图像也有)
一个 200 x 200 的网格正在填充墙砖(并且应该使用随机生成器创建路径和房间),但是当我在屏幕上绘制所有瓷砖时,很多瓷砖都不见了。下面是一个图像,在位置 (x81 y183) 之后,瓷砖根本没有绘制?
用于填充数组的代码将墙砖放在网格上,砖的位置是它的数组位置乘以父用于相机位置的砖大小(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 它应该是