我在XNA中创建一个游戏,需要绘制数千个小矩形/正方形。随着数量的增加,性能会变差。这是我目前使用的代码:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
foreach (SandBit sandBit in sandBitManager.grid)
{
Point p = sandBit.Position;
spriteBatch.Draw(square, new Rectangle(p.X, p.Y, sandBit.SIZE, sandBit.SIZE), Color.White);
}
spriteBatch.End();
base.Draw(gameTime);
}
我正在为每个方格调用spriteBatch.Draw()
,我正在重绘整个屏幕只是为了添加一个方格。我做了大量的搜索,我相信解决方法是绘制一个纹理,然后在该纹理上调用Draw()
,但我找不到相关的例子。
答案 0 :(得分:0)
尝试不在绘图函数中调用Rectangle构造函数,可以从中获得大的性能提升(只需反复使用相同的矩形对象,为属性设置不同的值)。
鉴于这是一款2D游戏(没有任何粒子或任何东西),您可能需要考虑为沙子使用更大的预生成纹理而不是大量的小矩形。无论你做什么,在你的绘制循环中有一个巨大的枚举将最终赶上你。
Rectangle sandBitRect = new Rectangle()
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
foreach (SandBit sandBit in sandBitManager.grid)
{
Point p = sandBit.Position;
sandBitRect.Left = p.X;
sandBitRect.Top = p.Y;
sandBitRect.Width = sandBit.SIZE;
sandBitRect.Height = sandBit.SIZE;
spriteBatch.Draw(square, sandBitRect, Color.White);
}
spriteBatch.End();
base.Draw(gameTime);
}