我正在创建一个基于沙子的 windows phone 8 游戏,并且正在考虑提高性能的方法。
沙子从顶部落下并与东西碰撞,因此必须每帧计算一次。
当前的实现是这样工作的:
- 有一个带有像素信息的 short[,] 数组,就像这个像素充满了沙子/障碍物/线条
- 沙子算法真的很简单。如果那里有空间,我会随机左右移动每一粒谷物,如果下面有空间,让它掉下来
- 出于性能原因,我在关卡开始处创建了一个具有不变背景图像的 WriteableBitmap
- 当我绘制字段时,我复制了预先创建的 WriteableBitmap,通过 WriteableBitmap.Pixels[] 将更改的部分添加到其中,并通过 ImageBrush.ImageSource 将其设置为画布背景
- 我在每次更新时所做的是计算后台线程中的沙子运动,并让 UI 线程进行绘图。这意味着我遍历整个 short[,] 数组并查看像素 [] 是否为沙子,如果是,则计算颗粒运动。之后将其复制到背景图像等。
使用此设置,我在诺基亚 Lumia 820 的调试模式下获得大约 15 fps,这似乎很慢。
我当然可以进行一些小的优化,比如使用随机映射而不是 random.Next 或使用一个大的 short[] 而不是 short[,],但是我注释掉了我的代码的不同部分,我似乎错过了在此设置中某处的主要性能下降。