actionscript 3 - AS3自定义对话框:如何发送push按钮标签到Main.fla



我创建了自己的as3 - dialogbox类。它有两个按钮("是"one_answers"否")

在类中有一个侦听器,当其中一个按钮被按下时启动一个函数。

在这个listener-function中,我可以通过调用event. currentttarget . mybuttontextfield .text.

来获取和跟踪按钮标签("Yes"或"No")。

所以我的问题是:

如何从类的listener-function中返回这些push值("Yes"或"No")到Main ?佛罗里达州吗?

因为在MAIN。fla我想把对话框的调用放在一个IF-ELSE-Statement中,该IF-ELSE-Statement将"捕捉"推入的"Yes"或"No"。

这样做的官方方法是什么?

我希望你能帮助我!提前感谢!

齿

  1. 创建类DialogEvent extends Event
  2. 添加private var _choice:String = "";
  3. 添加public function get choice():String { return _choice; }从对象
  4. 中检索值
  5. 复制Event类的构造函数,然后添加第一个参数,该参数取所选值public function DialogEvent (choice:String,....
  6. 在构造函数中设置_choice = choice;,并使用其他参数调用super()
  7. 添加public static const CHOICE:String = "choice";方便,这是可选的。它有助于在编译时检查代码中的拼写错误。
  8. DialogBox 当其中一个按钮被按下时dispatchEvent(new DialogEvent ("replace this with the button text", DialogEvent.CHOICE));调度事件
  9. 在主要
  10. 。Fla(建议:文件名不要全大写)等待即将发生的事件dialogBox.addEventListener(DialogEvent.CHOICE, onDialogChange);
  11. private function onDialogChange(event:DialogEvent):void中,尝试trace(event.choice);
  12. 添加public override function clone():Event调用您的修改构造函数以考虑附加变量中所示克隆自定义事件对象时clone()方法文档

在这种情况下,对话框分派自定义事件。你也可以在前一层这样做,让每个标签按钮分派一个自定义事件。


关于评论中的问题:

你说的"复制"[在步骤4]是什么意思?... 是否有一个位置,我可以看到和"复制"(=复制)As3的"自己的"事件类的代码?

这就是"复制"的本意。您正在寻找的位置是文档。看一下Event类的构造函数的文档:

Event () Constructor

public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)

为了说明这一点:您不必像这样复制构造函数。您可以为参数选择其他名称,也可以不使用它们。但是,建议复制构造函数,因为您希望像使用任何其他事件一样使用自定义事件,并添加一些其他参数(选择)。

public function DialogEvent(choice:String, type:String, bubbles:Boolean = false, cancelable:Boolean = false)
{
    super(type, bubbles, cancelable);
    _choice = choice;

声明这个常量的原因是什么?没有这个常数就不能工作吗?

该常量是可选的。然而,在内置的Event类中有这样的常量是很常见的,例如MouseEvent定义的常量:

CLICK: String = " CLICK "

CONTEXT_MENU: String = "contextMenu"

DOUBLE_CLICK: String = "doubleClick"

使用它们的原因是允许在编译时检查事件类型。比较对构造函数的这两个调用:

new DialogEvent ("replace this with the button text",
    DialogEvent.CHOICE));
new DialogEvent ("replace this with the button text",
    "chojce"));

都编译,只有第一个按预期工作,假设您正在监听类型为"choice"的事件。如果作为String字面值给出,则无法检查拼写类型是否错误。但是,类的属性可以在编译时检查:

new DialogEvent ("replace this with the button text",
    DialogEvent.CHOJCE)); // throws an error

此外,如果您使用的编辑器支持它,它允许代码完成。


只是为了完整:

我是否应该创建这样的构造函数:public function DialogEvent (choice:String, receivedEvent:Event) { _choice = choice; super(receivedEvent); }

您可以在文档中看到,Event类的构造函数不接受单个Event类型的参数。此代码无法编译。

最新更新