我目前正在使用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函数调用此函数,该函数基本上绘制每个tile。我试着把一个计数器放在每个瓷砖的绘制调用被击中的次数上,每次更新绘制函数被调用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);
}
我为代码墙道歉。这一切对我来说都很简单,但我似乎无法找出为什么它没有绘制所有的瓷砖。对于未绘制的图块可见仍为 true 且 currentImage 为0,应为
答案 0 :(得分:1)
在绘制大量16位图像时,monogame spritebatch仍然存在一些错误和错误。在我的情况下,大约200.000这不是你可以轻易解决的问题。如果你遇到同样的问题,请确保你绘制的每个图像都在屏幕上,你可能不会有任何问题。