大量的计算active 会对性能影响很大么?

大量的计算active 会对性能影响很大么?大量的每帧都会去计算需要显示还是隐藏,这样会不会很消耗性能,或是有没有更好的方法能达到同样的效果,我在做的项目就 是,可视区域之外的所有东西都只跑CPU,计算结果,当运动到可视区域之内的时候就active显示出来 , 这样做有没有什么问题,虽然这样做GPU性能显示提升了很多

让我想到了视锥裁剪,但个人感觉2D游戏没什么必要

如果不做,一个场景中可能会出现上千个节点,这样太消耗GPU了,做了之后 ,整体性能提升 ,怎么说呢,不掉帧了吧,能保持在60左右,不弄的话,能掉到10,,现在场景即使东西再多,GPU跑的东西都相对很少,我的所有的东西都是需要在一个场景里面玩成的,目前我只能想到这个方法

我觉得官方可以考虑出个解决方案,不在当前视图下的节点不要做渲染操作

不知道你说的是啥意思,目前在设置active的过程中遍历很大。设置完之后,并没有什么影响,跟原来一样~

我的意思是,比如我的场景可视是100100 但是可视之外有20002000的一个背景,上面有上千个精灵在运动,在显示,我现在做的处理是在这100100之外所有的精灵都为active false 当运动到这100100之内的时候才active true,有没有更好的处理方式,就是类似贪吃蛇那种游戏

画面剪裁的本质其实跟你这样差不多,只不过目前creator设置active的过程有点卡~,频繁设置,可能有点糟糕~

画面剪裁是怎么做啊,目前还好,后期测试再看具体性能,我现在就是在找更好的方法来完善这些,才接触好多不懂

hideNode: function(node) {
    var _renderComps = node.getComponentsInChildren(cc._SGComponent);
    for (var i in _renderComps)
        _renderComps[i].enabled = false;
}

需要隐藏节点时用这个函数即可,要显示的时候再把false改为true,比active开销小,另外如果你确定你的节点没有子节点的话把getComponentsInChildren改为getComponent开销更小

1赞

给你点个赞~~

好吧,刚大致看了一下,active就是封装的这个方法吧应该

active要涉及到所有组件,但这个方法只涉及到渲染组件

我记得creator之前有一版优化,你这样做多余了吧

刚试了你这个方法,不行,会很卡,效果不是特别明显,虽然是一样的,回头有时间可能还 测试下enabled,这个应该会好点,

enable 和 active 对渲染层来说区别不大
这里的卡顿可能在 JSB 上会更明显一点
升级到 1.3.0 之后卡顿会有所缓解

我现在用的就是1.31呀

看到你的帖子了,3000个节点对象,目前对于Creator是没办法承担的,只能改进逻辑。

嗯,昨晚看直播了,说了一个方法就是逐帧添加,挺好

我这边就在做贪吃蛇游戏,用的方法也是屏幕外active = false,但还是比较卡,问题在于:地图上有很多个点,每个点都要检测与各蛇头之间的距离(距离近就被蛇吃掉),即使屏幕外的active = false还是卡,请问这应该怎么解决?
还有蛇的移动我是用一个数组保存蛇头经过的位置,蛇的身体根据这个数组setPosition(),游戏只要稍微卡一下蛇就会“断
掉”,能大概说下蛇移动的方法吗? 谢谢:slightly_smiling:

用碰撞模块啊,每一个生成的新的贪食蛇身体都是一个拥有碰撞模块的预制资源。这样就不用计算距离了