在画板上通过捕捉touchmove事件,通过moveTo和lineTo重复画线,开始的时候画的是对的,当达到一定数量后,会出现下图的效果,线不再按照触点轨迹走,而是走之前画好的线的轨迹,并且颜色为中空,当再次达到一定数量后,又会画实心的线,但是总是原先的轨迹,如此往复,clear之后又正常了,但是达到一定数量后又如此。请问这个是代码的问题还是引擎的问题呢?
cocos creator1.4.1beta3
模拟器上运行。
代码和图已上传为附件。
drawtest.zip (571.4 KB)
moveTo,lineTo,stroke,fill调用1900次数左右之后,就出现这个问题了,这个调用次数有限制么?
webgl 顶点数不能超过 65536, 超过就会出现你这种情况
目前没有好的办法,你可以在线条太多的情况下新建一个 graphics
(1)我用模拟器运行的,和webgl有关么?
(2)1900*2=3800,到65536还差很多呢?
(3)如果不用graphics的话,用creator还有别的方法可以实现涂色/画线么?
(4)看论坛里有用drawnode的方式,可是这个在API里找不到呢,可以用么?
@2youyou2 感谢您的关注
- Native 也一样
- 65536 指的是渲染的顶点数, 和你画的点数不是一个东西(画一条线是需要几个顶点的)
- 也有其他人用图片来画的
- 这个可能会被干掉
后面会对 graphics 进行改进吧,顶点数过多的时候会新建一个 buffer
你这个 demo 不需要 fill 啊,多余的这个命令也会创建很多顶点,并且把 drawcall 打乱了
这个fill在api文档里没有呢,具体是什么意思?注释掉后,可以多画几百次。
graphics改进好了以后,是不是就可以这样创建一个画布,无限的画了?
看着就像笔没油了。。。。
好纠结啊,惜字如金才行
这个有答案么?@2youyou2
看一下文档里面的绘图系统
这个呢
这个是webgl就这样么,那别的引擎中的graphics组件也是这样的么,如果可以改进,那么大概哪个版本会有这个改进呢?如果来不及,就得想别的解决方案了。creator中除了这个graphics,想不到还有别的可行方案了,上面说的用图片来画的方案,是在运行轨迹上不断创建新的sprite的意思么?效率能扛的住么?
@2youyou2
- 每个引擎实现方法不一定一样,需要你自己去调研
- 目前排期太满,没有具体时间
- 效率可能会比 graphics 更快 (没测试过)
我用pixijs测试了,可以无限画。
理解,谢谢您了,通过您的解答了解学习了很多,我换个解决方案。
请问,无限画的方案能不能分享一下!
用的pixi引擎可以支持无限画,creator的我也没有找到方案,你找到的话分享给我看看:)
每画一次就渲染到一个节点上 就可以了呀
是用graphics么,可以具体说说嘛
这是我的代码片段,供参考:
var canvas = new cc.RenderTexture(rect.width, rect.height);
var brush = new cc.Sprite(“res/brush.png”);
brush.retain();
-------省略一堆其他代码------
canvas.begin();
brush.x = x;
brush.y = y;
brush.rotation = Math.random() * 360;
brush.visitWithParent();
canvas.end();
cc.JsbHelper.directorRender();
其中:visitWithParent 、directorRender 方法是自己绑定的 你看字面意思应该就知道干嘛的了
