cocos create 2.3.2 cc.Graphics 去 stroke 异常

  • Creator 版本:

  • 目标平台:

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

第二次 p1 undefined , pts 长度变成1了;第一次是2;

cc.Graphics 调用 这个 stroke 异常

2.3.2 create mac

你的上面的代码片段运行并没有出现报错,麻烦给个纯坐标数据的测试代码。

const { ccclass, property } = cc._decorator;

@ccclass
export default class Paintbrush extends cc.Component {
@property(cc.Graphics)
public pen: cc.Graphics = undefined;

private isTouchStart: boolean = false;

public onLoad() {
    this.pen.clear();
    this.pen.node.on(cc.Node.EventType.TOUCH_START, this.onTouchStartCallback, this);
    this.pen.node.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMoveCallback, this);
    this.pen.node.on(cc.Node.EventType.TOUCH_END, this.onTouchEndCallback, this);
    this.pen.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchCancleCallback, this);
}

public onTouchStartCallback(event: cc.Touch) {
    console.log('pen:', this.pen);
    this.isTouchStart = true;
    const pos = this.pen.node.convertToNodeSpaceAR(event.getLocation());
    // 与lineTo 有位移,这样画一个小点
    this.pen.moveTo(pos.x, pos.y - 0.1);
    this.pen.lineTo(pos.x, pos.y);
    this.pen.stroke();
    this.pen.moveTo(pos.x, pos.y);
}

public onTouchMoveCallback(event: cc.Touch) {
    if (this.isTouchStart) {
        const pos = this.pen.node.convertToNodeSpaceAR(event.getLocation());
        this.pen.lineTo(pos.x, pos.y);
        // this.pen.stroke();
        this.pen.moveTo(pos.x, pos.y);
    }
}

public onTouchEndCallback(event: cc.Touch) {
    this.isTouchStart = false;
}

public onTouchCancleCallback(event: cc.Touch) {
    this.isTouchStart = false;
}

}

代码 界面 如下

第一笔 写下正常;第二笔 就已经抱错了

给个完整的demo,我这边把你的代码做一遍,也没报错,2.3.3 版本测试。

NewProject.zip (815.1 KB)

已上传 如下

我这个版本 2.3.2 mac create

window 2.3.2 create 也是一样有问题

你升级下版本试试,你的demo也是正常运行的

还是用了版本 2.3.2 create ;把onTouchMoveCallback 方法里的, this.pen.moveTo(pos.x, pos.y); 注释即可

已确认问题 index的代码没有判断p1为null的情况 p1 = p1 || p0 这样加一下就可以了

@huanxinyin 我也遇到楼上的问题 同样的代码 报错也是一样的(bugly上抓到的线上的 不是比现的)之前用2.0.10是没有这个问题 目前版本是2.2.2线上有此问题

上面这种方式不行,还是有问题 ;最后 再每一个 this.pen.moveTo(pos.x, pos.y) 后面加一个这样的判断 (注意每一个!执行moveTo() 后面)->() if (cc.ENGINE_VERSION == ‘2.3.2’) {
this.pen._impl._updatePathOffset = true;

    }