Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Actionscript 3 位图热点(图像贴图)_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 位图热点(图像贴图)

Actionscript 3 位图热点(图像贴图),actionscript-3,flash,Actionscript 3,Flash,我正在制作一个游戏,其中舞台上有一个位图图像(库符号),我需要监视用户在位图上的鼠标手势 其思想是,当用户将鼠标悬停在图像上的不同点上时,将发生不同的动作(针对不同坐标的不同动作) 我以前也这样做过,但我作弊的方法是把看不见的MovieClips放在图像上,然后在这些MovieClips上听鼠标事件。我现在不能这样做,因为图像上有200多个兴趣点,舞台上有这么多多余的电影剪辑,这真的让一切都慢了下来 因此,我认为最好的方法是手动将所有xy坐标硬编码到类中,然后与鼠标坐标进行比较。问题是它变得很棘

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

其思想是,当用户将鼠标悬停在图像上的不同点上时,将发生不同的动作(针对不同坐标的不同动作)

我以前也这样做过,但我作弊的方法是把看不见的MovieClips放在图像上,然后在这些MovieClips上听鼠标事件。我现在不能这样做,因为图像上有200多个兴趣点,舞台上有这么多多余的电影剪辑,这真的让一切都慢了下来

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

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

  • 所有热点都是矩形(没有有趣的形状)
  • 我不想在舞台上放太多的电影
  • 使用AS3和CS6(非Flex)
  • 如果有推荐的项目,愿意使用开源代码

硬编码所有x y坐标看起来都很强烈——考虑这个解决办法,以直观地放置矩形:

  • 将200个movieclips放置在位图的正确位置
  • 在游戏开始时,迭代movieclips并将它们的每个坐标值添加到具有这些属性的对象数组中
  • 检索到每个movieclip的信息后,立即卸载它
  • 在旧场景中侦听movieclips上的鼠标事件可以替换为在新场景中侦听对象上的相应鼠标坐标。您可以检查数量是否大于对象的
    0,0
    ,而不是检查鼠标是否滚动,是否小于对象的
    宽度和高度

  • 这是一个可行的解决方案吗?它至少会将所有过程密集型动作集中到一开始,在那里可以加载,而不是分散到整个游戏中。对于开发人员来说,也有一点直观性。

    硬编码所有x y坐标看起来都很强烈。考虑一下这个解决办法来直观地放置矩形:

  • 将200个movieclips放置在位图的正确位置
  • 在游戏开始时,迭代movieclips并将它们的每个坐标值添加到具有这些属性的对象数组中
  • 检索到每个movieclip的信息后,立即卸载它
  • 在旧场景中侦听movieclips上的鼠标事件可以替换为在新场景中侦听对象上的相应鼠标坐标。您可以检查数量是否大于对象的
    0,0
    ,而不是检查鼠标是否滚动,是否小于对象的
    宽度和高度

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

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


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

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


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

    要加快计算速度,确定哪个热点(如果有)在鼠标坐标下,您可以在启动时生成“命中测试”位图。此位图从不向用户显示,但每个热点都绘制为一个具有生成的唯一颜色的矩形。对于每个热点,还可以向字典(可以是字典实例、数组或普通对象)添加一个条目,其中键是热点的颜色和值。这可以很好地扩展,因为无论你有多少个热点,你只需要执行一个getPixel(),然后检查字典中的热点。谢谢你的回答,我几乎同意了,但是Strille上面的评论让我思考了一下。对我来说,在编译时生成命中测试映像是可能的。@Strille这个评论对我帮助很大,这是一种我以前不知道的技术,非常有效。我能够编写一个JSF Fireworks脚本来提前生成命中测试图像。如果您将您的评论更改为答案,那么我将接受。完全没有问题,这是一个不错的选择,+1 d Strille的评论使该方法变得聪明和全面。为了加快计算速度,确定哪个热点(如果有)在鼠标坐标下,您可以在启动时生成“命中测试”位图。此位图从不向用户显示,但每个热点都绘制为一个具有生成的唯一颜色的矩形。对于每个热点,还可以向字典(可以是字典实例、数组或普通对象)添加一个条目,其中键是热点的颜色和值。这个比例真的很好,因为不管怎么说