WP7砂物理性能提升

时间:2013-03-15 02:58:23

标签: performance windows-phone-7 drawing game-physics

我正在创建一款基于沙子的Windows Phone 8游戏,我正在考虑提高性能的方法。

沙子从顶部落下并与东西发生碰撞,因此必须每帧计算。

目前的实施方式如下:

  • 有一个带有像素信息的短[,]数组,就像这个像素充满了沙子/障碍物/线条
  • sand算法非常简单。如果那里有空间,我会随机地左右移动每一粒谷物,如果下面有空间则让它掉下来
  • 出于性能原因,我在级别开始时使用不变的背景图像创建一个WriteableBitmap
  • 当我绘制字段时,我复制预先创建的WriteableBitmap,通过WriteableBitmap.Pixels []将更改的部分添加到它,并通过ImageBrush.ImageSource将其设置为画布背景
  • 我在每次更新时所做的是计算后台线程中的沙子移动并让UI线程执行绘图。 这意味着我遍历整个短[,]数组并查看像素[]是否为沙子,如果是,则计算粒子运动。之后将其复制到背景图像等。

通过这种设置,我在NOKIA Lumia 820上以调试模式获得了大约15 fps,这似乎有点慢。

我当然可以进行一些小的优化,例如使用随机地图而不是random.Next或使用一个大的short []而不是short [,],但我注释掉了我的代码的不同部分,我似乎在这个设置的某个地方缺少一个主要的性能接收器。

2 个答案:

答案 0 :(得分:1)

一个想法是使其在其下方/侧面完全被阻挡的沙子被设置为“不活动”。更新后不检查非活动沙子,直到其侧面/下方移动(这将设置现在被释放为“活动”的所有像素)

答案 1 :(得分:1)

我自己开始创建这样的东西www.sandicle.com那里有一个旧的测试视频,它现在有点快,并且有更多的功能......(我总是喜欢丢掉一些熔岩:)...)希望很快回到这个项目上(目前有点忙:(

但基本上我通过降低分辨率得到40-60fps

我还添加了一个编辑器,您可以创建自己的粒子,并且可以在人们创建它们时下载新的元素包:)