lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: ningbnii
打印 上一主题 下一主题

关于LGraphics类的add方法问题

[复制链接]

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

楼主
发表于 2020-1-8 13:20:05 |显示全部楼层
graphics.add所添加的线,是会每帧绘制的(包括画面上所有的可见的对象,都是需要每帧重绘的),所以console.log循环触发是正常的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2020-1-8 14:14:53 |显示全部楼层
ningbnii 发表于 2020-1-8 14:05
哦,就相当于写在了LEvent.ENTER_FRAME事件中吧,是否有方法让它只绘制一遍呢 ...

虽然每帧重绘,但每帧就是绘制一遍啊,这个没什么不对的啊
画面上所有东西都是每帧重绘的,不然画面就成了静态的了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

板凳
发表于 2020-1-8 15:09:58 |显示全部楼层
ningbnii 发表于 2020-1-8 14:59
比如我定义一个画圆的方法,里面调用add去用原生canvas去画的
function drawingCircle() {
  drawing.grap ...

不是的,画面上所有东西,即使它们不动,也是每帧全部擦除然后重绘的,不过开发者不需要关心这些
所谓的有没有重复绘制,就是指在一帧内有没有重复
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

地板
发表于 2020-1-8 15:42:50 |显示全部楼层
ningbnii 发表于 2020-1-8 15:40
哦,我现在是将所有的点放到一个数组中,在mouse_move的时候循环所有点去绘制,在mouse_up的时候将数组置 ...

graphics.add加进来的东西,如果不用的话,你需要用graphics.clear来清除的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

5#
发表于 2020-1-8 15:59:53 |显示全部楼层
ningbnii 发表于 2020-1-8 15:56
是想保留的,因为我做的是个画板,就是要保留绘画的笔迹,现在是add在不停的绘制,数组一清空,笔迹也没 ...
  1. drawing.graphics.add(function (ctx) {
  2.       if(points.length){

  3.         ctx.beginPath();
  4.         ctx.moveTo(points[0].x,points[0].y);
  5.         for (var i=1;i<points.length;i++){
  6.           ctx.lineTo(points[i].x,points[i].y);
  7.         }
  8.         ctx.stroke();
  9.       }
  10.     })
复制代码
你的代码里的判定是points.length大于0的时候才会绘制啊,但是你把points清空了
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

6#
发表于 2020-1-8 16:16:42 |显示全部楼层
ningbnii 发表于 2020-1-8 16:07
因为从鼠标按下,到鼠标抬起,这个过程是一笔嘛,我这个points记录的就是这一笔的所有点的坐标,那么在鼠 ...

但是,你用笔刷画图的那部分代码也被points限制了啊,所以虽然引擎去执行graphics.add里面的绘图代码,但是那部分代码执行不了啊
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2020-1-8 16:27:11 |显示全部楼层
ningbnii 发表于 2020-1-8 16:22
那这样我是不是就得把每一笔的笔画都在add中跑着啊,这样如果点多了,感觉效率肯定会受到影响的 ...

的确是这样,所以笔刷这样写是没问题的,画板就需要优化一下
方法1,每次使用一个临时画板,画完一笔之后,把临时画板上的东西draw到另一个画板上,然后清空临时画板
方法2,也是我推荐使用的,利用LBitmapData的setPixels或者putPixels等函数来绘图

下面QA中的第七条中,我给了一个demo,你可以参考一下demo中的方法,里面持续绘图所用的方法是完全没有效率问题的
http://lufylegend.com/api/zh_CN/out/classes/Q%20&%20A%20(%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98).html
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

8#
发表于 2020-1-8 16:37:56 |显示全部楼层
ningbnii 发表于 2020-1-8 16:32
感谢lufy的指点,我研究一下demo

不客气,有问题再交流
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

9#
发表于 2020-1-9 08:15:52 |显示全部楼层
ningbnii 发表于 2020-1-8 22:05
bitmapdata1 = new LBitmapData(null,0,0,w,h,LBitmapData.DATA_CANVAS);
    ctx = bitmapdata1._ca ...

这样倒也是可行的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-2 18:54 , Processed in 0.056304 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部