paper.js:有什么方法可以使用 onMouseEnter/Leave 和透明路径填充?
paper.js: Any way to use onMouseEnter/Leave with transparent path fill?
我有一个 paper.js 矢量场景,其中包含带有轮廓但没有填充或透明填充的路径。当路径具有具有任何非零 alpha 值的填充颜色时,附加到每个路径的 onMouseEnter
/onMouseLeave
事件正确触发,例如#00000001
。当填充是透明的或不存在时,我只会在光标在形状上移动时碰巧碰到轮廓时触发 onMouseEnter
事件。
虽然最小 alpha 解决方案有效,或者我可以确保填充颜色与背景颜色相匹配,但我有重叠的形状,并且更喜欢不需要像那样可能导致问题的几乎正确的 hack 的解决方案许多形状堆叠起来。
This example 使用全局命中测试,我想我可以通过一些重新架构使其工作。这是最好的方法吗?
有什么方法可以让透明填充的路径在光标在形状内移动时始终触发 onMouseEnter
事件?
paper.js 非常努力地从命中结果中排除透明路径。最后,对我有用的最务实的事情是修补我感兴趣的各个路径。我使用的是 Typescript,因此注释:
(myPath as any)._hitTestSelf = function(point: paper.Point): paper.HitResult | undefined {
// This conditional replaces the original paper.Item one:
// if (options.fill && this.hasFill() && this._contains(point))
if (this._contains(point))
// HitResult doesn't expose a constructor; we need to build it ourselves.
const result = new paper.HitResult()
result.type = 'fill'
result.item = this
return result
}
}
我知道有很多关于效率、一般的猴子补丁等的警告,我可能忽略了,但是,好吧,WFM。
顺便说一句,我很乐意将 allowTransparent
视为 paper.js 中命中测试的一个选项。挖掘了源代码后,我认为这不会太难吗?
我有一个 paper.js 矢量场景,其中包含带有轮廓但没有填充或透明填充的路径。当路径具有具有任何非零 alpha 值的填充颜色时,附加到每个路径的 onMouseEnter
/onMouseLeave
事件正确触发,例如#00000001
。当填充是透明的或不存在时,我只会在光标在形状上移动时碰巧碰到轮廓时触发 onMouseEnter
事件。
虽然最小 alpha 解决方案有效,或者我可以确保填充颜色与背景颜色相匹配,但我有重叠的形状,并且更喜欢不需要像那样可能导致问题的几乎正确的 hack 的解决方案许多形状堆叠起来。
This example 使用全局命中测试,我想我可以通过一些重新架构使其工作。这是最好的方法吗?
有什么方法可以让透明填充的路径在光标在形状内移动时始终触发 onMouseEnter
事件?
paper.js 非常努力地从命中结果中排除透明路径。最后,对我有用的最务实的事情是修补我感兴趣的各个路径。我使用的是 Typescript,因此注释:
(myPath as any)._hitTestSelf = function(point: paper.Point): paper.HitResult | undefined {
// This conditional replaces the original paper.Item one:
// if (options.fill && this.hasFill() && this._contains(point))
if (this._contains(point))
// HitResult doesn't expose a constructor; we need to build it ourselves.
const result = new paper.HitResult()
result.type = 'fill'
result.item = this
return result
}
}
我知道有很多关于效率、一般的猴子补丁等的警告,我可能忽略了,但是,好吧,WFM。
顺便说一句,我很乐意将 allowTransparent
视为 paper.js 中命中测试的一个选项。挖掘了源代码后,我认为这不会太难吗?