我正在开发一种“落沙”风格的游戏。
我尝试了许多将沙子绘制到屏幕上的方法,但是,每种方法似乎都会以一种或另一种形式产生一些问题。
我经历过的事情清单:
从像素大小的纹理一次一个地绘制每个像素。问题:每次更新大约有 100,000 个像素发生变化后速度变慢。
将每个像素绘制到一个大的texture2d,绘制texture2d,然后清除数据。问题:使用 texture.SetPixel() 非常慢,即使处理旧纹理,也会导致少量内存泄漏(大约每秒 30kb,加起来很快),即使在对象上调用 dispose 也是如此。我根本不知道如何阻止它。然而,总的来说,这是最好的方法(到目前为止)。如果有办法阻止泄漏,我想听听。
使用位图中的 Lockbits。从位图的角度来看,这非常有效,但不幸的是,我仍然必须将位图转换回 texture2d,这会导致帧速率下降到小于 1。所以,如果我能找到一种在 xna 中绘制位图而不转换它(或其他东西)的方法,它就有可能很好地工作。
通过用透明像素替换像素的“旧”位置,然后用正确的颜色设置新位置,将每个像素设置为带有设置像素的纹理 2d。这使完成工作所需的像素组数量增加了一倍,并且比使用数字 2 慢得多。
所以,我的问题是,有更好的主意吗?或者关于如何修复样式 2 或 3 的想法?