位图热点(图像映射)

时间:2013-10-05 13:32:18

标签: actionscript-3 flash

我正在构建一个游戏,其中舞台上有一个位图图像(库符号),我需要监视用户在位图上的鼠标手势。

这个想法是当用户将鼠标悬停在图像上的不同点上时,会发生不同的操作(不同坐标的不同操作)。

我过去做过这个,但是我通过在图像上放置不可见的MovieClip来欺骗,然后在这些MovieClip上侦听鼠标事件。我现在不能这样做,因为图像上有超过200个兴趣点,在舞台上有如此多的额外MovieClip真的会让它完全放慢速度。

所以,我认为最好的方法是手动将所有X Y坐标硬编码到类中,然后与鼠标坐标进行比较。问题是它变得棘手,我的代码膨胀而且没有优化。

这样做是否有共同/好的方式?

  • 所有热点都是长方形(没有搞笑的形状
  • 我想避免在舞台上放置大量的MovieClip
  • 使用AS3和CS6(不是Flex
  • 如果有推荐的项目,则愿意使用开源代码

2 个答案:

答案 0 :(得分:2)

对所有X Y坐标进行硬编码看起来确实非常激烈 - 考虑这种解决方法可以直观地放置矩形:

  1. 将200个动画片段放在位图
  2. 的正确位置
  3. 在开始游戏时,迭代动画片段并将其每个坐标值添加到具有这些属性的对象数组中
  4. 检索其信息后立即卸载每个动画片段
  5. 可以通过在新方案中侦听对象上的相应鼠标坐标来替换旧方案中动画片段上的鼠标事件。您可以检查该金额是否超过对象的0,0且小于其width,height,而不是检查鼠标是否翻过来。
  6. 这是一个可行的解决方案吗?它至少会将所有过程密集型动作集中在一开始就可以加载,而不是在整个游戏中传播。作为开发人员,您也会更直观。

答案 1 :(得分:2)

为了加快确定哪个热点(如果有)在鼠标坐标下的计算,您可以在启动时生成“命中测试”位图。此位图永远不会显示给用户,但每个热点都会绘制为具有生成的唯一颜色的矩形。

对于每个热点,您还可以在字典中添加一个条目(可以是字典实例,数组或普通对象),其中键是颜色,热值是值。这很好地扩展,因为无论你有多少个热点,你只需要执行一个getPixel()然后检查字典中的热点。