0

1)嘿。我需要像素方面的帮助...如何在绘制功能中以更少的延迟绘制像素?当我画它们时,我的处理器使用率为 40%,这太多了。

protected override void Draw(GameTime gameTime)
        {
                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
                spriteBatch.Draw(grasspixel, screenpos, Color.Red);
                GraphicsDevice.Clear(Color.CornflowerBlue);
                DrawGround(spriteBatch, 1024, 768, screenpos, grasspixel);
                spriteBatch.End();

                base.Draw(gameTime);            
        }

这是 DrawGround 函数:

public void DrawGround(SpriteBatch spriteBatch, int screen_X, int screen_Y, Vector2 screenPosition, Texture2D texture)
        {
            Vector2 tempVector = Vector2.Zero;
            for (int i = 1; i <= screen_X; i++)
            {
                for (int j = 1; j <= screen_Y; j++)
                {
                    if (earth[i, j] == 1)
                    {
                        tempVector.X = i;
                        tempVector.Y = j;
                        spriteBatch.Draw(texture, tempVector, Color.Blue);
                    }
                }
            }
        }

在 DrawGround 中,我从数组中获取像素位置,然后将它们返回给 Vector2。

2)我需要每帧都画我的地图吗?

是否有特殊的缓冲区或类似的东西来做到这一点?对不起,如果我问一些愚蠢的问题,但我是 XNA 的新手。对不起,我的英语不好。

4

1 回答 1

2

问题是您每帧绘制786432 (1024*768) 个精灵。每个精灵由 2 个三角形组成,需要拉伸和定位,不要忘记所有的纹理采样。SpriteBatch 很快,但没那么快。

通常你会在更大的区域上绘制你的草纹理,使用大小超过 1*1 像素的精灵。为屏幕上的每个像素绘制一个精灵确实违背了它的全部目的。

因此,将图像编辑程序中的草像素组合到纹理中,并使用一些大型精灵来绘制地面。这应该会使您的 FPS 达到合理的速度。


如果您确实需要基于每个像素将数据写入纹理,请使用该Texture2D.SetData方法。

于 2013-04-14T22:14:53.537 回答