AS3 - 在同一个类文件中的两个Movieclip之间命中测试对象

时间:2011-09-08 04:56:07

标签: actionscript-3 class

我想知道是否有一种方法可以在同一个类的两个动画片段之间执行命中测试对象。正在使用for循环将影片剪辑产生到舞台中。

是否有可能if(item(event.currentTarget).hitTestObeject(item(thats not being selected at the moment?)))我正在进行拖放游戏,并且在拖动到舞台上的捕捉插槽时,我试图不让物品堆叠在彼此之上。如果没有,是否有其他方法可用?提前致谢(:

2 个答案:

答案 0 :(得分:1)

首先,检测两个显示对象(精灵,动画片段等)是否相互碰撞,这与对象是同一个类的实例无关。重要的是,你有两个实例,它们是显示对象,所以你很高兴。

如果你想做点击测试,那么我会做以下事情:

  1. 创建一个帮助程序类,该类包含已创建的所有项目的数组。
  2. 帮助者类需要将自己添加为事件的所有项目的监听器,您开始拖动项目。
  3. 拖动项目后,辅助类会将自身添加为该项目的鼠标移动事件的侦听器
  4. 在鼠标移动事件处理程序中,辅助类从当前拖动的项目到项目列表中的每个项目进行命中测试(简单的循环)
  5. 如果命中测试结果为true,则保存当前测试的项目,因为这是您拖动项目与之重叠的项目。
  6. 现在你可以进行测量(比较两个项目的位置,边界框等),找出拖动项目的位置,使其不再重叠。
  7. 如果用户结束拖动,请不要忘记删除鼠标移动事件侦听器。

答案 1 :(得分:0)

几个星期前,我正在研究一个非常具体拖动的项目,所以我们决定不使用Flex DragManager。我们所谓的DragManager没有做任何特别的事情。我认为与你的工作有关的是snap块的存在。在我们的例子中,快照块是简单的组。每个快照块都有一个引用它的对象的引用(假设它是lostItem)。在尝试删除项目时,甚至在触发捕捉机制之前,只需在快照块中进行简单检查

 if (droppedItem == null)

这就是我们案例中的解决方案。 我不确定你的插槽是什么,但我希望我们的方法能帮到你。

最好的问候,伊万