Xna工作室4.像素绘图

时间:2013-04-14 19:36:20

标签: c# xna

1)嘿。我需要有关像素的帮助...如何在绘制函数中绘制具有较少lagg的像素?虽然我正在绘制它们,但我的处理器使用率是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的新手。 抱歉我的英语不好。

1 个答案:

答案 0 :(得分:2)

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

通常情况下,您会使用大于1 * 1像素的精灵在较大区域上绘制草纹理。为屏幕上的每个像素绘制一个精灵确实击败了它的整个目的。

因此,将图像编辑程序中的草像素与纹理结合起来,并使用几个大精灵来绘制地面。这应该会使你的FPS达到合理的速度。


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