Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Phaser3中将事件添加到svg元素_Svg_Phaser Framework - Fatal编程技术网

在Phaser3中将事件添加到svg元素

在Phaser3中将事件添加到svg元素,svg,phaser-framework,Svg,Phaser Framework,我有一个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.

我有一个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中,则存在计算成本更高的hitbox,并为hitbox设置启用“像素完美”。这将查看投影纹理,并在每个SVG渲染的像素上应用hitboxArea


每个SVG的一个较便宜的hitbox是在输入管理器测试指针事件时实现一个自定义命中测试函数。这将是更加困难的,它的困难取决于你想要的点击框的形状,以及你需要这个点击框的准确性。可以在Phaser.Geom名称空间中找到基本几何图形和命中测试的包含方法,如果这些与您的用例不匹配,您需要自己编写/查找函数。

谢谢,我已经失去了获得任何帮助的希望。将路径拆分为它们自己的SVG听起来不错。我将深入研究HitAreaCallback.BTW您对使用Phaser的graphics.fillPoints()代替SVG路径有何看法。使用填充点,我可以参考我绘制的每个区域。唯一的大问题是fillpoints()期望参数是一个Geom数组。Point和SVGs path属性的格式完全不同(d=“M238.114402.543l)。就个人而言,我会将纹理保留为SVG。我想这取决于你对纹理的期望。如果它们是静态的,那么除了SVG之外就没有其他理由了。