const { ccclass, property } = cc._decorator; @ccclass export default class LineLogic extends cc.Component { points: any = []; eachLineWidth: number = 20 prePoint: cc.Vec2; preWorldPoint: cc.Vec2; @property(cc.Node) dashed: cc.Node = null; dashedDraw: cc.Graphics; draw: cc.Graphics onLoad() { this.dashedDraw = this.dashed.getComponent(cc.Graphics); this.draw = this.getComponent(cc.Graphics) console.log('加载完毕') } start() { } onTouchStart(e) { console.log('测试') var pos = e.getLocation(); this.preWorldPoint = pos; pos = this.node.convertToNodeSpaceAR(pos) this.prePoint = pos; this.points.push(cc.v2(pos.x, pos.y)) this.draw.clear() this.draw.moveTo(pos.x, pos.y) return true } onTouchMove(e) { var pos = e.getLocation(); var nowWorldPoint = pos; pos = this.node.convertToNodeSpaceAR(pos) var disX = pos.x - this.prePoint.x var disY = pos.y - this.prePoint.y var dis = Math.sqrt(disX * disX + disY * disY) if (dis >= this.eachLineWidth) { // 射线检测 let result = cc.director.getPhysicsManager().rayCast(this.preWorldPoint, nowWorldPoint, cc.RayCastType.All); if (result.length <= 0) { this.points.push(cc.v2(pos.x, pos.y)) this.draw.lineTo(pos.x, pos.y) this.draw.stroke() this.prePoint = pos; this.preWorldPoint = nowWorldPoint; this.dashedDraw.clear() } else { console.log('aaaaaa') this.dashedDraw.clear(); this.dashedDraw.moveTo(this.prePoint.x, this.prePoint.y); this.dashedDraw.lineTo(pos.x, pos.y); this.dashedDraw.stroke(); } } } onTouchEnd(e) { this.dashedDraw.clear(); var len = this.points.length this.addComponent(cc.RigidBody) var collider: cc.PhysicsPolygonCollider = this.addComponent('MyPhysicsCollider') collider.points = this.points collider.density = 120 collider.friction = 0.99 collider.apply() } }