在上述代码基础上,希望帮我优化一下一个功能点:当手指碰出屏幕外了,我发觉线段会不执行TOUCH_END的逻辑,这点我该如何解决
时间: 2024-02-19 20:57:53 浏览: 28
可以使用 `cc.Node.EventType.TOUCH_CANCEL` 事件来处理手指离开屏幕的情况,将 `cc.Node.EventType.TOUCH_END` 和 `cc.Node.EventType.TOUCH_CANCEL` 事件都绑定到 `this.node` 节点上,如下所示:
```
let endPoint = cc.v2(0,0);
let startPoint = cc.v2(0,0);
let endPointDraw = cc.v2(0,0);
this.node.on(cc.Node.EventType.TOUCH_MOVE, (e) => {
startPoint = e.getStartLocation();
endPoint = e.getLocation();
const distance = startPoint.sub(endPoint).mag();
if (distance <= 300) {
this.draw.clear();
this.draw.moveTo(startPoint.x, startPoint.y);
this.draw.lineTo(e.getLocationX(), e.getLocationY());
endPointDraw = cc.v2(e.getLocationX(), e.getLocationY());
this.draw.stroke();
}
}, this);
const touchEndOrCancel = (e) => {
this.draw.clear();
let lineStart = startPoint.clone(); // 保存 300 线段的起点
let lineEnd = endPointDraw.clone(); // 保存 300 线段的终点
this.cut(lineStart, lineEnd); // 在 cut() 方法中处理 300 线段
};
this.node.on(cc.Node.EventType.TOUCH_END, touchEndOrCancel, this);
this.node.on(cc.Node.EventType.TOUCH_CANCEL, touchEndOrCancel, this);
```
这样,无论手指是否离开屏幕,都会执行 `touchEndOrCancel` 方法里的逻辑,保证了代码的正确性。