Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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_Apache Flex - Fatal编程技术网

Actionscript 3 检测全局坐标的更改 问题

Actionscript 3 检测全局坐标的更改 问题,actionscript-3,apache-flex,Actionscript 3,Apache Flex,如何检测组件的全局x y坐标的更改(从组件内部)。所谓全局坐标,我指的是相对于舞台的坐标,而不是相对于容器的坐标 当MyComponent.x发生更改时,检测它很容易,但当MyComponent.parent.x发生更改时,就不那么容易了 例子 在下面的代码中,有一个#容器,其中包含MyComponent。#container的坐标取决于当前状态,但是MyComponent的坐标相对于#container保持不变 <s:states> <s:State name="s

如何检测组件的全局x y坐标的更改(从组件内部)。所谓全局坐标,我指的是相对于舞台的坐标,而不是相对于容器的坐标

MyComponent.x
发生更改时,检测它很容易,但当
MyComponent.parent.x
发生更改时,就不那么容易了


例子 在下面的代码中,有一个
#容器
,其中包含
MyComponent
#container
的坐标取决于
当前状态
,但是
MyComponent
的坐标相对于
#container
保持不变

<s:states>
    <s:State name="state1" />
    <s:State name="state2" />
</s:states>

<s:Group id="container" x.state1="0" x.state2="35"
                        y.state1="0" y.state2="35">
    <local:MyComponent width="300" height="400" />
</s:Group>

在上面的代码中,我如何检测
MyComponent
的位置(相对于阶段)何时发生了变化

我需要从MyComponent中的代码中执行此操作,当状态发生变化时,仅仅调用函数是不够的


思想 到目前为止,我已经试着听了
updateComplete
move
resize
等等。。但它不起作用

我还考虑过在所有家长身上收听
entertage
或收听
move
,我认为这些选项可能需要大量资源,我希望有更好的方法


理由 在真实代码中,我将
StageWebView
包装在
UIComponent
中,当父级的坐标发生变化时,我遇到了问题。我没有办法去听那件事


如果您以前使用过这个类,您就会知道它不能添加到显示列表中,而是附加到舞台上。这使得管理起来很困难,我想将其包装起来,以便可以直接在MXML中重用。

您可能可以尝试覆盖该类中x,y的setter及其全部父类。这样,您就不会收听事件,但您将能够通过正常方式判断何时设置了x或y。但是,如果您还想在right或horizontalCenter之类的内容导致内容自动移动时捕捉到它,那么这将不起作用。

您可以使用MyComponentRef.transform.concatenatedMatrix将转换应用于它。矩阵的
tx
ty
属性将满足您的需要。

我认为这是不可能的,我必须覆盖每个家长的道具,一路走下去。我需要在单个类MyComponent中执行此操作。向每个父级添加事件侦听器实际上更可取,至少可以在运行时动态执行此操作。问题不是找到全局位置,而是检测它的更改。为了获得全球位置,我一直在使用localToGlobal。