0

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

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

我过去曾这样做过,但我通过在图像上放置不可见的 MovieClips 来作弊,然后在这些 MovieClips 上监听鼠标事件。我现在不能这样做,因为图像上有超过 200 个兴趣点,在舞台上准时有这么多额外的 MovieClip 真的会减慢它的速度。

因此,我认为最好的方法是将所有 XY 坐标手动硬编码到类中,然后与鼠标坐标进行比较。问题是它变得棘手,我的代码臃肿且没有优化。

有没有一种通用/好的方法可以做到这一点?

  • 所有的热点都是矩形的(没有有趣的形状
  • 我想避免在舞台上放置大量的 MovieClip
  • 使用 AS3 和 CS6(不是 Flex
  • 有推荐项目愿意使用开源代码
4

2 回答 2

2

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

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

于 2013-10-07T15:36:18.417 回答
2

对所有 XY 坐标进行硬编码似乎非常激烈 - 考虑使用这种解决方法来直观地放置矩形:

  1. 将 200 个影片剪辑放置在位图中的正确位置
  2. 在开始游戏时,遍历动画剪辑并将它们的每个坐标值添加到具有这些属性的对象数组中
  3. 检索到信息后立即卸载每个影片剪辑
  4. 在旧场景中侦听动画剪辑上的鼠标事件可以通过在新场景中侦听对象上的相应鼠标坐标来代替。无需检查鼠标是否滚动,您可以检查数量是否大于对象的量0,0且小于其的量width,height

这是一个可行的解决方案吗?它至少会将所有流程密集型动作集中到可以加载的开头,而不是分散到整个游戏中。作为开发人员,对您来说也更直观一些。

于 2013-10-05T14:56:30.137 回答