我正在开发一个游戏,它使用 mx 画布(每个画布在自己的 mxml 文件中)来包装应用程序的不同方面。所以 UI 被包裹在一个画布中,主游戏屏幕被包裹在另一个画布中,依此类推。我遇到了一个问题,MouseEvent.CLICK
即我想要转到一个movieClip 的鼠标输入(特别是,但它似乎适用于所有鼠标输入)GameScreen.mxml
被一个mx.core.FlexSprite
名为“ contentPane
”的对象捕获,该对象是GameUI.mxml
.
当对象被实例化时,这个contentPane
精灵不存在GameUI
,事实上,直到我设置一些textFields
包含在GameUI
. 这些确实与我想要接收鼠标输入的内容textFields
重叠,但它们本身被设置为,并且没有捕捉到鼠标输入。movieClip
textFields
mouseEnabled = false
我的代码都没有直接创建这个contentPane
精灵,一些基本的谷歌搜索告诉我这个contentPane
精灵是由mx.flex.container
内部创建的。但是,我似乎找不到任何关于它实际上是如何工作的文档,以及是什么导致了这个精灵被创建。
此功能以前有效,我知道最近唯一的重大变化是将加载到它们自己的应用程序域中的 swfs 移动GameUI
到它们自己的应用程序域中以修复命名空间冲突。我完全准备好相信这就是问题所在。
理想情况下,我想知道为什么这contentPane
会突然捕捉到鼠标输入。如果做不到这一点,我至少想找到一些关于如何contentPane
工作、如何操作以及导致其实例化的文档。
预先感谢您的帮助。
编辑:
我做了一些额外的挖掘,并想分享我学到的东西:
该contentPane
变量在mx.core.container
对象中实例化以用于滚动和剪辑目的。如果对象的内容mx.core.container
超过该对象的大小,容器将创建一个contentPane
并将其内容移动到该窗格中。但是,如果禁用滚动 ( verticalScrollPolicy="off"
& horizontalScrollPolicy="off"
) 并禁用剪辑 ( clipContent="false"
),则容器不会实例化contentPane
. 这解决了我的具体问题,因为我不需要在此容器中进行滚动或剪切行为。
我仍然想知道是否有办法禁用鼠标输入mx.core.container
contentPane
。好像应该有。