xna - MonoGame Spritebatch仅部分绘制 TileField

  显示原文与译文双语对照的内容
0 0

我目前正在使用MonoGame的顶层游戏,使用来指示一个位置是否行走或者者不是行走。 瓷砖大小为 32 x32 ( 图像也有)

一个 200 x 200的网格正在填充墙砖( 随机发生器就会产生一条路径和房间),但是当我画出屏幕上的所有砖块时,都会丢失。 下面是一个图像,在位置( x81 y183 ) 之后,平铺就不会被绘制?

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

用于填充 array的代码将墙砖放在网格上,并且平铺的位置是 array 位置。

 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 函数中的happends

 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 则为tile减去相机位置的位。

 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 which它应该是

时间:原作者:5个回答

0 0

在绘制大量 16位 图像时,monogame spritebatch仍然有一些 Bug 和错误。 在我大约 200.000的情况下,这不是你能轻易解决的事情。 如果遇到同样的问题,请确保画面上所绘制的每个图像都在屏幕上。

原作者:
...