为什么我的按钮实例忘记了它的文本域文本和事件监听器?

时间:2012-12-02 02:57:59

标签: actionscript-3 flash oop flash-builder flash-cs5

编辑:为什么这么多的downvotes?在Stack Overflow上询问与Flash有关的问题是否违法?

请帮忙。我正在明天的午夜工作,我准备撕掉我的头发了。我是ActionScript和Flash Builder的新手,所以这可能是一个很容易解决的问题。我想我知道它是什么,但我不确定......

我正在开发一个天气应用程序。我在Flash CS5中设计了GUI。界面有2帧。第一帧是具有邮政编码输入和名为“提交”的按钮实例的菜单。在第二帧,它有另一个名为“更改”的按钮实例,它将您带回第一帧菜单。

在Flash Builder 4中,我编写了一个类来扩展名为Application的GUI。当Main.as实例化它时,构造函数运行。然而,这是我的第一个问题。

public class Application extends InputBase {
    public function Application() {
        super();

        // Y U NO WORK???
        this.gotoAndStop(1);
        this.change.tfLabel.text = "Change";
    }
}

当我运行调试时,它抛出一个#1009错误,说它无法访问未定义对象的属性或方法。它在Flash CS5中的第2帧上定义。我认为这是问题...... ActionScript不是基于框架的编程语言吗?比如,您无法访问第1帧第2帧的代码?但是,我对此感到困惑,因为我没有在时间轴上编码?

无论如何,我想到了一个解决方案。它有点有效,但很难看。

public class Application extends InputBase {
    public function Application() {
        super();

        // Y U NO WORK???
        this.gotoAndStop(1); // when app is first ran, it will stop on the first frame which is the menu frame
        setButton(this.submit, "Submit", 1);
        setInput(this.tfZipCode);
    }

    private function submitZip(e:MouseEvent):void {
        this.nextFrame();
        setButton(this.change, "Change", 2);
    }

    private function menu(e:MouseEvent):void {
        this.prevFrame();
        setButton(this.submit, "Submit", 1); // if I comment this out, the submit button will return to the default text label and it forgets it event.
    }

    private function setButton(button:ButtonBase, string:String="", action:uint=0):void {
        button.buttonMode = true;
        button.mouseChildren = false;
        button.tfLabel.selectable = false;
        button.tfLabel.text = string;

        switch (action) {
            case 1:
                button.addEventListener(MouseEvent.CLICK, submitZip);
                break;
            case 2:
                button.addEventListener(MouseEvent.CLICK, menu);
                break;
            default:
                trace("Action code was invalid or not specified.");
        }
    }
}

每次单击其中一个按钮实例时,运行设置按钮功能不是我的一杯茶。这是由帧或其他我可能会查看的东西造成的吗?

1 个答案:

答案 0 :(得分:1)

我相信你有两个关键帧&两者都有一个名为按钮的按钮组件的实例。

如果您正在使用时间轴,请尝试将按钮放在一个单独的图层中,只有一个关键帧。

如下所示:

enter image description here

确保您每次都使用相同的按钮。不会在每一帧上产生新的。