webGL改成Canvas渲染以后,卡帧如何优化

如下图,我把webGL 改成了 canvas渲染以后,节点直接上天的多,然后掉帧的很厉害,谁能告诉我一套优化的思路,我应该如何下手去优化canvas的渲染?

兄弟,请教一个问题: ‘点’很多的时候遍历蛇头会导致很卡, 现在我把屏幕外的点和部分蛇 active 设为 false,可是在安卓上跑还是很卡,有什么好的解决办法吗?

1赞

并没有,我现在还没到优化的时候,还在写功能,只能慢慢找问题了,太底端的机子也没办法,还有就是有可能你的那个安卓手机是canvas渲染的,不是webGL所以就会更卡,so 我也在找人回答我的问题呢

哦哦 同问,顶顶顶,大神快来:2:

为何我发现像这种贴子官方都不回答,因为优化不好?

因为优化的细节太多,没有你的代码或者整个实现思路,很难回答。。。
来看看Panda大大讲如何优化游戏的视频吧:
http://pan.baidu.com/s/1nvRjG9r 密码:v7xl

这个看过了,基本都有用到,我只是不明白,为什么安卓和苹果区别会这么大,两个渲染方式不一样,节点就会全出来?隐藏不了?

就好像在安卓上面active没有用一样

修正一下,应该是在用canvas渲染的时候,active没有作用,

WebGL和Canvas是很不一样。WebGL性能高。我看引擎源代码里面active=false的时候是创建一个空渲染节点代替原渲染节点,active=true的时候再替换回来。因此node数没有变。你看看能不能Canvas外的节点不但设置active=false,也不去设置position?或者放回对象池?进入Canvas时再加进来。

发现问题了,好像是因为sprite设置了type : TILED,然后就会显示渲染节点很多

我这是在微信 上面跑的,能删的都删了,就是这样的界面,蛇身上这个脏矩怎么处理

你的游戏东西基本都在动,最好不要开脏矩形吧。游戏开始时运行下面的代码关闭脏矩形:

if (cc._renderType === cc.game.RENDER_TYPE_CANVAS) {
    cc.renderer.enableDirtyRegion(false);
}

微信完全跑不动啊,我刚去看了Layabox人家500个精灵,只画一次,全屏动画,流畅的不行啊

我现在这里只加了50个食物点进去,但是渲染出来一共会有多300左右,而且一会50帧一会20帧,来回跳

我的一个场景不只500个精灵,刚用微信运行了一下,也很流畅啊。你试试用Chrome的Profile看看哪里消耗时间比较多?像Panda视频里那样。(我也没做过)

creator怎么查看当前是什么渲染模式

cc._renderType代表渲染模式

// Canvas
cc._renderType === cc.game.RENDER_TYPE_CANVAS
// WebGL
cc._renderType === cc.game.RENDER_TYPE_WEBGL
2赞

我现在因为用了是原生的碰撞,所以节点本身不能active,因为如果直接给节点本身加了active那么,这个节点就不在了,碰撞也就失效了,这样会导致我屏幕外的蛇就不会发生碰撞了,我现在的做法是,给原来的节点的父级加了一个空节点,对这个空节点加碰撞,子节点 才是渲染节点,然后当父节点跑到屏幕外的时候,对子节点进行active false,我这种做法欠妥么,目前我也只能想到这种笨方法了

我刚测试了一下,发现微信 的渲染用的是canvas渲染,打印出来是0 有没有什么办法强制微信 为webGL渲染