-2

明日の深夜に予定されている課題に取り組んでおり、髪を引き裂こうとしています。私はActionScriptとFlashBuilderにかなり慣れていないので、これは簡単に解決できる問題かもしれません。私はそれが何であるかを知っていると思いますが、確かにはわかりません...

天気予報アプリケーションを開発しています。私はFlashCS5でGUIを設計しました。インターフェイスには2つのフレームがあります。最初のフレームは、郵便番号入力と「送信」と呼ばれるボタンインスタンスを持つメニューです。2番目のフレームには、最初のフレームであるメニューに戻る「変更」と呼ばれる別のボタンインスタンスがあります。

Flash Builder 4では、そのGUIを拡張するためのApplicationというクラスを作成しました。Main.asがインスタンス化すると、コンストラクター関数が実行されます。しかし、これが私の最初の問題でした。

public class Application extends InputBase {
    public function Application() {
        super();
        
        // Y U NO WORK???
        this.gotoAndStop(1);
        this.change.tfLabel.text = "Change";
    }
}

デバッグを実行すると、未定義のオブジェクトのプロパティまたはメソッドにアクセスできなかったという#1009エラーが発生しました。FlashCS5のフレーム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つがクリックされるたびに、ボタンの設定機能を実行するのは私のお茶ではありません。これは、フレームまたは私が見ている他の何かが原因ですか?

4

1 に答える 1

1

2つのキーフレームがあり、どちらにもbuttonというボタンコンポーネントのインスタンスがあると思います

タイムラインで作業している場合は、キーフレームを1つだけにして、ボタンを別のレイヤーに配置してみてください。

次のようなもの:

ここに画像の説明を入力してください

毎回同じボタンを参照し、各フレームに新しいボタンを生成しないようにします。

于 2012-12-02T07:50:25.950 に答える