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的新手。 抱歉我的英语不好。
答案 0 :(得分:2)
问题是您每帧都要绘制 786432 (1024 * 768)精灵。每个精灵由2个三角形组成,需要拉伸和定位,不要忘记所有纹理采样。 SpriteBatch很快,但速度不快。
通常情况下,您会使用大于1 * 1像素的精灵在较大区域上绘制草纹理。为屏幕上的每个像素绘制一个精灵确实击败了它的整个目的。
因此,将图像编辑程序中的草像素与纹理结合起来,并使用几个大精灵来绘制地面。这应该会使你的FPS达到合理的速度。
如果确实需要基于每个像素将数据写入纹理,请使用Texture2D.SetData
方法。