Actionscript 3 是否有人经历过使用getObjectsUnderPoint的副作用(包括性能问题)?

Actionscript 3 是否有人经历过使用getObjectsUnderPoint的副作用(包括性能问题)?,actionscript-3,actionscript,Actionscript 3,Actionscript,在我对正在进行的游戏项目进行重大更改之前,我只想听听其他人是否发现DisplayObject的getObjectsUnderPoint()函数存在任何问题 更新: 不仅是性能问题,还有使用它的任何其他限制(比如它不检测特定类型的UIElement(如示例所示)) 我将在我的应用程序中有三层(这是一个等距游戏) 背景——这只是一个留在底部的背景,与游戏无关 中间层——这是可玩的区域,这里我所有的游戏元素都将放在这一层 顶层——这是一个虚拟透明层,覆盖整个可播放区域,中断所有鼠标事件。这就是我想要

在我对正在进行的游戏项目进行重大更改之前,我只想听听其他人是否发现DisplayObject的getObjectsUnderPoint()函数存在任何问题

更新: 不仅是性能问题,还有使用它的任何其他限制(比如它不检测特定类型的UIElement(如示例所示))

我将在我的应用程序中有三层(这是一个等距游戏)

  • 背景——这只是一个留在底部的背景,与游戏无关
  • 中间层——这是可玩的区域,这里我所有的游戏元素都将放在这一层
  • 顶层——这是一个虚拟透明层,覆盖整个可播放区域,中断所有鼠标事件。这就是我想要使用getObjectsUnderPoint()的地方
因此,玩家想要点击元素,顶层将中断mouseevent,然后检查是否有放置的东西或只是一个普通的背景,并采取适当的行动,如通知下面的对象

这真的不需要这样做,因为我可以直接为地图上的所有项目添加moues事件,但因为我将使用getObjectsUnderPoint()检查项目下是否有任何内容


如果有人能解释这个函数是如何工作的,那么我就很难做出决定。

不过有一个恼人的问题。我不知道他们是否修好了。至少有10.1次


如果您有一个容器并缩放了它
container.getObjectsUnderPoint
将返回错误的结果。总是因此,在我需要
getObjectsDerpoint
的任何地方,我都必须从
stage
调用它才能得到正确的结果。

不过有一个恼人的问题。我不知道他们是否修好了。至少有10.1次


如果您有一个容器并缩放了它
container.getObjectsUnderPoint
将返回错误的结果。总是因此,在需要
getObjectsDerpoint
的任何地方,我都必须从
stage
调用它以获得正确的结果。

这是一个不完整的函数。它返回鼠标下的图形对象,而不是用于事件或交互目的的所有潜在鼠标目标。实际上,检查getObjectsUnderPoint返回的数组以确定鼠标目标需要复杂的逻辑,因为适当的目标(如果您实际单击该点,Flash将选择的目标)可能不在列表中

首先,您必须反向检查对象数组,因为这些项是从后向前排序的。您必须检查每个对象的整个父链,查找mouseChildren=false的父对象,这将导致它拦截事件并成为目标。无论是否找到这样的对象,您到达的最后一个对象必须将其mouseEnabled属性设置为true,否则您必须跳过它并移动到数组中的下一个对象,例如,该对象将是您最初检查的对象后面的下一个精灵或形状。在浏览列表时,您必须注意到父对象何时发生更改,此时您需要假设该公共父对象的所有子对象的mouseEnabled属性都设置为false,在这种情况下,父对象将成为下一个候选对象。这实际上是非常复杂的,因为您使用的是自下而上的方法,使用的是自上而下生成的一组不完整的对象


要获取实际的潜在鼠标事件目标,请与默认调度逻辑一致。。。实际上,从舞台上以自上而下的方式开始,在深度优先搜索中向后遍历显示层次结构更容易,检查mouseChildren以确定是否需要进入儿童,并检查mouseEnabled是否要成为目标,否则,请进入容器的子容器,并再次从后向前重复该过程。这更准确、更完整、更直截了当。唯一的问题是你必须自己编码。

这是一个不完整的函数。它返回鼠标下的图形对象,而不是用于事件或交互目的的所有潜在鼠标目标。实际上,检查getObjectsUnderPoint返回的数组以确定鼠标目标需要复杂的逻辑,因为适当的目标(如果您实际单击该点,Flash将选择的目标)可能不在列表中

首先,您必须反向检查对象数组,因为这些项是从后向前排序的。您必须检查每个对象的整个父链,查找mouseChildren=false的父对象,这将导致它拦截事件并成为目标。无论是否找到这样的对象,您到达的最后一个对象必须将其mouseEnabled属性设置为true,否则您必须跳过它并移动到数组中的下一个对象,例如,该对象将是您最初检查的对象后面的下一个精灵或形状。在浏览列表时,您必须注意到父对象何时发生更改,此时您需要假设该公共父对象的所有子对象的mouseEnabled属性都设置为false,在这种情况下,父对象将成为下一个候选对象。这实际上是非常复杂的,因为您使用的是自下而上的方法,使用的是自上而下生成的一组不完整的对象

要获取实际的潜在鼠标事件目标,请与默认调度逻辑一致。。。实际上,以自上而下的方式从舞台开始,在深度优先搜索中向后遍历显示层次结构,检查mouseChildren以确定是否需要进入子级,并检查mouseEnabled是否要成为目标,否则进入