Actionscript 3 - 同步点击事件

时间:2012-07-07 18:36:15

标签: actionscript-3 flash mouseevent modal-dialog synchronous

我正在尝试在flash中构建自定义模式对话框。我选择的方法是创建一个影片剪辑类,其中包含用于对话框的UI以及向其添加按钮的功能。然后我在添加所有按钮后调整ui的大小并将其显示在屏幕上。

到目前为止。现在我想要任何称为此对话框的内容,等待一个按钮被选中,然后用户才能执行任何其他操作。有点像:

var dialog:MyDialog = new MyDialog();
dialog.addButton(new MyButton("Foo"));
dialog.addButton(new MyButton("Bar"));
var result:String = dialog.show(); // we will wait here

在dialog.show中我希望显示影片剪辑,然后在返回之前等待用户单击对话框上的按钮。 MouseEvent.CLICK事件是异步的,所以我不知道如何等待它。

另一种方法是为对话框创建一个完整的自定义完成事件,该对话框被添加到调用对话框的屏幕,我可以继续使用逻辑并且有一个禁用其他输入的布尔值,但这是一个相当大的麻烦,我从未做过类似的事情。

1 个答案:

答案 0 :(得分:1)

你所描述的是对同步和异步的错误概念。

当对话框出现时,您仍然希望用户能够点击对话框按钮。如果该过程是同步的,则整个程序将冻结,因为鼠标单击操作的例程永远不会到达。请记住,flash是单线程

具有弹出窗口的线程与底层应用程序共享相同的线程。

最简单的方法就是在按钮上发送一个事件,发送一些您可以在应用程序中监听的关闭事件。不需要自定义事件类。

dispatchEvent(new Event("close"))

作为一个例子。

如果您担心用户与应用程序之外的部分进行交互,那么您可以使用mouseEnabled true在弹出窗口后面绘制一个矩形,或者使用Flex的模型对话框类进行检查。