碰撞
__hitWorld?(point: IRadiusPointData): boolean
完全重写碰撞世界坐标方法。
以下为碰撞路径的示例,首先会检测是否需要更新碰撞数据,之后转为本地坐标,再调用 __hit()
注:当检测到光标与元素的外边界碰撞了,才会调用此方法进一步检测
const local = {} as IRadiusPointData
// 类内部
__hitWorld(point: IRadiusPointData): boolean {
if (this.__layout.hitCanvasChanged) {
this.__updateHitCanvas()
this.__layout.hitCanvasChanged = false
}
PointHelper.toLocalRadiusPoint(point, this.__world, local)
return this.__hit(local)
}
__updateHitCanvas(): void {
if (!this.__hitCanvas) this.__hitCanvas = this.leafer.hitCanvasManager.getPathType(this)
this.__drawRenderPath(this.__hitCanvas)
}
__hit(local: IRadiusPointData): boolean
仅重写碰撞本地坐标方法。
碰撞路径由__drawRenderPath(this.__hitCanvas) 方法绘制而来。
__hit(local: IRadiusPointData): boolean {
const { __hitCanvas: h } = this
if (this.__.fill && h.hitPath(local, this.__.windingRule)) return true
const strokeWidth = ((this.__.__strokeOuterWidth || 0) + local.radiusX) * 2
if (h.strokeWidth !== strokeWidth) {
h.strokeWidth = strokeWidth
h.stroke()
}
return h.hitStroke(local)
}