我想遍历一个覆盖屏幕上每个像素的数组。即:
for (int y = 598; y > 0; y--)
{
for (int x = 798; x > 0; x--)
{
if (grains[x][y])
{
spriteBatch.Draw(Grain, new Vector2(x,y), Color.White);
}
}
}
...我的纹理是一个1x1像素的图像,当数组值为true时,它会被绘制到屏幕上。它运行得体 - 但是我覆盖的屏幕越多,肯定会滞后。有没有更好的方法来实现我想要实现的目标?
答案 0 :(得分:7)
不使用X x Y个别精灵,而是创建单个图像,并适当设置像素。然后只需将整个图像渲染为单个精灵上的纹理。
锯齿状阵列很可能不问题 - 而不是近50万精灵。
答案 1 :(得分:0)
问题是你每帧在绘图方法中花费了大量的CPU时间。无论是否在固定时间,您的Game实例的Draw方法将始终被调用。鉴于此,您总是希望确保尽可能少花时间,这意味着您希望将大部分工作放在GPU上。
嵌套的for循环以及对spriteBatch.Draw
的所有调用将使用更慢的CPU,尤其是当你的循环变得越来越大时,这意味着延迟绘制。
如果你想按照每个像素进行逐像素计算,那么最好的方法是将工作放在GPU上并使用像素着色器。您可以通过创建一个所需大小的纹理并将数组传递到保存“开启或关闭”信息的着色器以及实现相同目标的其他方法来完成您自己的问题。