需求:就是批量画200*200的格子,然后可能画好多层, 目前创建效率特别慢,drawcall是渲染的1次,但是创建的时间已经超过了我能理解的天际,大约有个10秒多,而且精灵全部添加到一个精灵节点上,缩放会导致所有的精灵显示异常,目前阀值在0.22左右,也就是说缩放小于0.22 会导致同父节点的其他精灵的显示异常!
补充下用的1.9.3
2.x版本会好很多,但是原生平台不行。没办法等官方吧
现在是不解决也的解决!
刚刚那个缩放是因为超过了最大定点数了!但是目前还是加载慢!
哪一个平台上出现的情况?批量花200*200的格子你是使用的graphics么?看你的描述感觉又像是用的sprite。缩放的情况又是什么样的?麻烦提供一个demo,或者将你的使用过程、节点数结构这些描述清楚,方便我们查看问题。
另外标题请与问题相关,否则很难吸引其他热心群众帮你解决问题……
var grayTiled = new cc.Node();
grayTiled.setPosition(pos);
var sprite = grayTiled.addComponent(cc.Sprite);
sprite.spriteFrame = tex;
grayTiled.setColor(graycolor);
self._preGrayTileMapLayer.addChild(grayTiled)
这样的代码重复10000次,需要3秒到4秒
我用cocos2dx 版本写的都是draw call 1次,大约都是毫秒级别,不知道你这个过程进行了什么操作
后来我用了graphics 来创建格子,但是定点数太大了。我缩小的时候定点数根本受不了,10W+
在一帧中loop 1万次,每次new一个node出来,这瞬间带来的内存飙升。换了任何一个引擎都会有卡顿的啊。js作为脚本语言,效率本来就低,何况还在瞬间new这么多节点出来,就算放在C++去做也是一样的会卡顿。
如果你这1万个格子不是全在视窗里的话,可以优先替换视窗中可见的格子的spriteframe,然后再异步去更换其他格子的spriteframe。
或者使用npm的async模块,分帧异步替换spriteframe。
另外可以参考下这个文章关于大地图tiledmap使用的讨论:
https://forum.cocos.com/t/ccc-tiledmap-demo/37879/3
他这地图肯定是不考虑缩放的,如果要做缩放的话定点数会炸裂!