我正在尝试在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事件是异步的,所以我不知道如何等待它。
另一种方法是为对话框创建一个完整的自定义完成事件,该对话框被添加到调用对话框的屏幕,我可以继续使用逻辑并且有一个禁用其他输入的布尔值,但这是一个相当大的麻烦,我从未做过类似的事情。
答案 0 :(得分:1)
你所描述的是对同步和异步的错误概念。
当对话框出现时,您仍然希望用户能够点击对话框按钮。如果该过程是同步的,则整个程序将冻结,因为鼠标单击操作的例程永远不会到达。请记住,flash是单线程。
具有弹出窗口的线程与底层应用程序共享相同的线程。
最简单的方法就是在按钮上发送一个事件,发送一些您可以在应用程序中监听的关闭事件。不需要自定义事件类。
dispatchEvent(new Event("close"))
作为一个例子。
如果您担心用户与应用程序之外的部分进行交互,那么您可以使用mouseEnabled true在弹出窗口后面绘制一个矩形,或者使用Flex的模型对话框类进行检查。