iOS 微信小游戏物理性能问题研究

明白,那么当大块发生切换时,那些要不显示的节点和新增的显示节点是做addParent和removeFromParent操作吗,我一直觉得做节点的新增和删除也很费性能,这样在触发切换时会不会卡帧?我这个考虑是否多余?

弱弱问一句 这个画面 在哪里可以调试出来

都是要考虑的,还要结合游戏具体选择如何平衡。比较到底是添加删除costy还是多几个占内存的对象costly

比如在黑暗之魂。血源诅咒里,远景模型很占内存。所以如果你快速转视角,会看到很多远景从无到有闪现出来。因为它的算法还要考虑人物视角覆盖了哪些景物,但是加载是有时间的,所以还是会有瑕疵。

黑暗之魂。血源诅咒里,远处的敌人行动有时看上去会特别卡顿,其实因为远处的敌人不重要,他们的update方法调用频率低的关系

好的,讲的很清楚了。确实优化是一个平衡的过程,蛮有意思的,感激解惑!
另外,我玩血缘打到两条狗那里就过不去了,然后吃灰到如今,太难了:joy:

chrome浏览器性能调试

大家的讨论真有意思,这篇帖子可以说很精华了,分享几个有用的信息

  1. Particle 粒子系统的性能,CPU 端运算性能在 2.0 有所提升。我们有尝试过做 GPU Based Simulation,虽然在部分设备上可以正常运行,但是由于 WebGL 1.0 不支持 Floating Point Texture,所以无法做到广泛兼容,暂时放弃了这个方案。
  2. Tilemap 的性能问题,我们有对 Tilemap 做图块剪裁,所以不会导致填充率超过屏幕像素过多,但是图块剪裁算法的性能对于正交 map 是最好的。所以理论上只要图块不要过小导致 vertex 过多,Tilemap 并不会成为瓶颈。
  3. Box2d 的物理模拟可以通过 youyou 分享的方法来控制,但你一开始遇到的主要问题还是碰撞体过多导致的运算量过大,这点在没有 JIT 的 iOS 小游戏平台就会导致非常严重的问题。具体的优化可以考虑使用区域划分等方法,来将计算量限制在需要关注的范围内。
  4. 如果不是渲染的瓶颈,优化 DC 意义不大,专注在瓶颈上进行优化。

这个已经有游戏尝试了,如果地图是精灵组成的,确实有一定的优化,但是再一次,如果渲染不是性能瓶颈,这个优化意义就不大。另外,Tilemap 组件的实现,图块并不是节点和渲染组件,整个地图是由 Tilemap 自己负责渲染的,不存在节点数量过多的问题

从你的截图来看是这样,但是 GPU 的损耗并不均衡,说明在部分帧损耗很高,部分帧损耗很低,要检查原因是什么,看有问题的帧具体渲染了什么样的内容

1赞

我怎么感觉勾选自动释放资源,内存还是降不下去啊?

我是自己实现的tilemap地图,自己定义格式然后解析后new出不同的sprite节点,放到了根节点上,这样绘制的地图。没有直接用tilemap因为自己现实效率更高(逻辑简单),也方便后期扩展其他编辑玩法。

那像我这种情况能用到你们引擎的优化吗,地图大了节点数还是过多吧?
能开放什么机制让我直接传一个根节点,你们把它作为tilemap来整体渲染,并且裁剪不必要的节点,可以吗?不然我得为了用到tilemap的引擎优化而强制用tilemap组件了。

建议你测一下性能对比,你这样实现的话,填充率取决于地图尺寸,很可能非常大,可能是你的 GPU 渲染损耗高的原因,需要自己做 culling。另外,引擎需要遍历你的节点树来构造渲染数据,损耗也比 tilemap 高。

手动组装渲染数据比较麻烦,你可以看一下 example-cases 里面的 custom ia 范例,这个路子可以达到甚至超过 tilemap 的性能,但是优化起来还是很需要花一番功夫的

官方大大,1.10的性能提升是不是比1.9.2的提升很多呢?小游戏环境.现在项目急切需要解决这个问题.

没有,1.10 和 1.9 性能接近,2.0 才有大幅度的性能提升

没找到呀,你说的是下面这个吗?

我找到了,在next分支里面,幸好我机智:grin:

请问下,为什么我仅仅只是开启了enabledAccumulator,并没有修改FIXED_TIME_STEP,原本只是稍微有点卡的场景(物体移动稍微有点卡顿).在开启了enabledAccumulator的情况下,物体每秒移动的距离突然变大了,像是瞬移了一样

next分支 我还去工程里找了半天。。原来是git上

感兴趣,什么游戏,能看下吗。

在微信浏览器中,safari中,还有部分安卓机中测试,游戏流畅无比,PS:我是一名学生!在玩COCOS CRESTOR。
但是,当我发布到小程序的时候,就特别卡。具体表现就是,当屏幕中物理引擎驱动的物体到达3个,就会特别卡!
我做的也是一个小DEMO,就是射击游戏,屏幕中有几个来回跳动的球球,球中间有数字,看谁打分高的那种。
所以我想知道,微信中卡顿的原因是什么,这个和浏览器运行JS有什么区别?
在运用物理引擎的时候,如何进行优化!具体的操作是什么呢?www.pianoboy.club/game是我的DEMO的web地址!

如果用了物理引擎,可以通过修改游戏帧率和检测的步长降低检测频率,提高性能。
var pymanager = cc.director.getPhysicsManager();

// 开启物理步长的设置
pymanager.enabledAccumulator = true;

// 物理步长,默认 FIXED_TIME_STEP 是 1/60
pymanager.FIXED_TIME_STEP = 1/30;

// 每次更新物理系统处理速度的迭代次数,默认为 10
pymanager.VELOCITY_ITERATIONS = 8;

// 每次更新物理系统处理位置的迭代次数,默认为 10
pymanager.POSITION_ITERATIONS = 8;

非常感谢!

微信,tiledMap mark