graphics画线过多后出现错乱,官方帮忙看看

在画板上通过捕捉touchmove事件,通过moveTo和lineTo重复画线,开始的时候画的是对的,当达到一定数量后,会出现下图的效果,线不再按照触点轨迹走,而是走之前画好的线的轨迹,并且颜色为中空,当再次达到一定数量后,又会画实心的线,但是总是原先的轨迹,如此往复,clear之后又正常了,但是达到一定数量后又如此。请问这个是代码的问题还是引擎的问题呢?
cocos creator1.4.1beta3
模拟器上运行。
代码和图已上传为附件。
drawtest.zip (571.4 KB)

moveTo,lineTo,stroke,fill调用1900次数左右之后,就出现这个问题了,这个调用次数有限制么?

webgl 顶点数不能超过 65536, 超过就会出现你这种情况
目前没有好的办法,你可以在线条太多的情况下新建一个 graphics

1赞

(1)我用模拟器运行的,和webgl有关么?
(2)1900*2=3800,到65536还差很多呢?
(3)如果不用graphics的话,用creator还有别的方法可以实现涂色/画线么?
(4)看论坛里有用drawnode的方式,可是这个在API里找不到呢,可以用么?
@2youyou2 感谢您的关注

  1. Native 也一样
  2. 65536 指的是渲染的顶点数, 和你画的点数不是一个东西(画一条线是需要几个顶点的)
  3. 也有其他人用图片来画的
  4. 这个可能会被干掉

后面会对 graphics 进行改进吧,顶点数过多的时候会新建一个 buffer

你这个 demo 不需要 fill 啊,多余的这个命令也会创建很多顶点,并且把 drawcall 打乱了

这个fill在api文档里没有呢,具体是什么意思?注释掉后,可以多画几百次。
graphics改进好了以后,是不是就可以这样创建一个画布,无限的画了?

:joy:看着就像笔没油了。。。。

好纠结啊,惜字如金才行

这个有答案么?@2youyou2

看一下文档里面的绘图系统

这个呢

这个是webgl就这样么,那别的引擎中的graphics组件也是这样的么,如果可以改进,那么大概哪个版本会有这个改进呢?如果来不及,就得想别的解决方案了。creator中除了这个graphics,想不到还有别的可行方案了,上面说的用图片来画的方案,是在运行轨迹上不断创建新的sprite的意思么?效率能扛的住么?
@2youyou2

  1. 每个引擎实现方法不一定一样,需要你自己去调研
  2. 目前排期太满,没有具体时间
  3. 效率可能会比 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 方法是自己绑定的 你看字面意思应该就知道干嘛的了