svg - 在 Phaser3 中向 svg 元素添加事件
问题描述
我有一个 SVG 图像文件,有一些路径。就像是:
<svg>
<g>
<path id="land" class="land" d="M108.114,402.043l0.683,1.604l-1.204.(truncated)">
<path id="ice" class="ice" d="M288.114,402.541l0.683,1.604l-1.204...........">
<path id="water" class="water" d="M038.114,402.543l0.683,1.604l-1.204........">
</g>
</svg>
我需要知道点击了哪个路径。当我使用 load.svg() 在 Phaser 中加载 SVG 图像文件时,会为整个图像触发事件,而不仅仅是区域(或路径)。
那么,如何检测点击了哪个路径?任何帮助表示赞赏。
解决方案
可能使用了错误的术语,但 SVG 加载器将投影的 SVG 绘制为静态位图纹理。这消除了这些路径对象的存在。即使您将这些路径拆分为它们自己的 SVG 并将它们分层,纹理的命中框也将是矩形的,具体取决于纹理的大小。
如果您将这些路径分离到它们自己的 SVG 中,则会存在一个计算成本更高的碰撞箱,并为碰撞箱设置Docs Phaser3 #makePixelPerfect启用了像素完美。这将查看投影纹理并在每个 SVG 渲染的像素上应用 hitboxArea。
当输入管理器测试指针事件时,每个 SVG 的较便宜的命中框将实现自定义命中测试功能。文档 Phaser3 HitAreaCallback。这将变得更加困难,其难度取决于您要寻找的碰撞箱的形状,以及您需要该碰撞箱的准确度。命中测试的基本几何和包含方法可以在 Phaser.Geom 命名空间中找到,如果这些与您的用例不匹配,您需要自己编写/查找函数。
推荐阅读
- ruby-on-rails - 仅在满足特定条件时运行一组验证的最佳实践?
- php - 如何通过添加到购物车查询字符串将多个可变产品添加到购物车
- python - 在不更改原始数据框的情况下向数据框的副本添加一列
- reactjs - 在 react-datepicker 中使用带有日期范围的 React-Redux 表单字段
- excel - VBA试图覆盖匹配记录并将不匹配的记录从ws1移动到ws2
- python - 使用 tensorflow、顺序预测时需要更高的准确性
- ios - XCode 自动完成功能不适用于扩展
- vba - 带有许多工作表和宏的慢速 Excel 文件
- mysql - 从 MySql 中的模式获取表行数
- android - 如何为录音机添加暂停选项