这是我用cc.Graphics做的,每次生成新线条之前把旧的clear()了,但是这个方法线条会一直闪。。。有无更优解求指点
直接弄个9图拉长旋转不好吗
你这是creator啊,你发到creator下不好么。。
而且即便用cc.Graphics做,也不应该会闪,我做过类似的,没闪过
好吧,我是新手以为2d就是聊2d的话题。。
你是不是在update里去clear旧的?
你可以监听node的位置变化事件(文档里有这个事件),当node的位置发生改变时再去重新绘制,是不会闪的。
wow,多谢!那graphics可以加collider吗?
节点本身都可以加collider,但是想贴合线段比较难。
cc.Node.EventType.POSITION_CHANGED 好像不能实时监听node位置的改变…在回调里放了console.log,只在物体开始改变位置的时候打印了一次信息
具体要怎么做呢,比如会用到什么method之类的?
哦,我看了一下我之前写的。你写在update中,记录上一帧的位置,和当前帧的位置进行比较,有非零的差值再绘制。
这个事件确实不行。
666~这样确实可以了~~
谢谢朋友们指点,总结一下,目前有两个方法:
第一个还是用cc.Graphics,等到点的位置改变才重新绘制,就不会闪了
第二个是放另外一个作为线条的cc.Node进去根据两个点的位置进行旋转缩放,具体方法是:
- 把线条的位置设置在两个点的中间(线条Node的锚点应是(0.5,0.5))
- 用Math.atan反正切函数根据邻边和对边算出弧度,再换算成角度,这个角度就是线条Node的rotation
- 用勾股定理算出斜边长,再除以线条Node的height,这个值就是线条Node的scaleY
第一个方法会更简便,假如需要给线条加collider的话用第二个方法会更好一点
你们这里有一个错误,闪与不闪和update应该是没有关系的,我就是在update里面进行重绘的
这是我2年前一个项目的代码,没有闪的情况
update() {
this.graphics.clear();
for (let i = 0, len = lines.length; i < len; i++) {
...
this.graphics.stroke();
}
}
那graphics可以加collider吗?
如果距离关节能满足你的需求的话,与graphics结合是个很好的选择
刚试了一下我突然发现直接这样写也不会闪了。。。不知道上次发生了什么。。。不过
先判定点的位置有没有改变再决定要不要绘制应该可以省一点运算力吧
update() {
this.graphics.clear();
this.graphics.moveTo(this.a.x, this.a.y);
this.graphics.lineTo(this.b.x, this.b.y);
this.graphics.stroke();
}
然后joint我刚试了一下,好像两个物体之间的连线是不能加collider的
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。

