0

AS3でボタンを非表示に設定しようとしていますが、フレームを離れてフレームに戻ると、ボタンが再び表示されます。これは私が通信技術クラスのために作っている危険なゲームのためのものです。

これが私が現在持っているものです:

a1.addEventListener(MouseEvent.CLICK, a1mouseClick); 

function a1mouseClick(mouse:MouseEvent) {
    a1.visible = false;
    gotoAndStop("A1");
    trace("Going to A1");
}

ただし、a1ボタンでフレームに戻ると、再び表示されます。

これが私の現在のアニメーションです:https ://dl.dropbox.com/u/23938245/jeporady.fla

4

3 に答える 3

4

タイムラインを移動している間、Flash Playerはスプライト、ムービークリップ、テキストフィールドを再作成できるため、ボタンが再び表示されます。レクリエーションを防ぐには、すべてのコントロールをキーフレームなしで別のレベルに移動します。キーフレームが必要な場合は、すべてのキーフレームでこのボタンに同じインスタンス名を設定してみてください。

于 2013-01-01T21:50:25.070 に答える
1

フラッシュタイムラインとキーフレームがどのように機能するかについての基本的な側面が欠けています。そのフレームから離れると、そのフレームのコンテンツのステージインスタンスとそのプロパティ/状態はなくなります。そのフレームに戻ると、キーフレームの内容に基づいてインスタンスが再度作成されます。

現在のアプローチを考えると、最善の解決策は、メインボードをすべてのフレームで永続化することだと思います。これを行うには、レイヤーを作成し、キーフレームをフレーム2からフレーム27に拡張します。ただし、次の問題は、画面上のすべての要素を表示したくない場合に、それらの要素の表示を調整することです。

私の提案は、その画面のすべての要素をそれ自体のムービークリップシンボルに入れ、そのムービークリップとそのリスナーのすべてのコードを、作成したこの新しいレイヤーに追加することです。たとえば、そのインスタンスにmain_boardという名前を付けることができるため、main_board.visibleプロパティを使用してインスタンスの可視性を変更できます。そのソリューションを選択した場合は、そのインスタンス名も使用するように、そのフレームのすべてのコードを変更する必要があります。

main_board.a1.visible = false;

また、addEventListener行もすべて変更する必要があります。

main_board.a1.addEventListener(MouseEvent.CLICK, a1mouseClick);

このゲームへのあなたのアプローチは大幅に単純化される可能性がありますが、私がすでに行ったよりもさらにこの質問の範囲を超えています!

于 2013-01-01T22:01:49.457 に答える
1

@fsbmainと@prototypicalは正しいです。

タイムラインを移動している間、Flash Playerはスプライト、ムービークリップ、テキストフィールドを再作成できるため、ボタンが再び表示されます。レクリエーションを防ぐには、すべてのコントロールをキーフレームなしで別のレベルに移動します。キーフレームが必要な場合は、すべてのキーフレームでこのボタンに同じインスタンス名を設定してみてください。

私はあなたのプロジェクトを見ていました、そして簡単な修正を提供します、あなたは以下をする必要があります:

  1. 次のアクションですべてのフレームで使用可能ないくつかのアクションを管理するために、その上に新しいレイヤーを作成します。

    import flash.display.DisplayObject;
    
    // Manages the buttons visible state 
    var buttonsStates:Object = {
        "a1":true, "b1":true, "c1":true, "d1":true, "e1":true,
        "a2":true, "b2":true, "c2":true, "d2":true, "e2":true,
        "a3":true, "b3":true, "c3":true, "d3":true, "e3":true,
        "a4":true, "b4":true, "c4":true, "d4":true, "e4":true,
        "a5":true, "b5":true, "c5":true, "d5":true, "e5":true
    };
    
    // Checks the buttons visibility
    function checkVisibility () {   
        for (var buttonName:String in buttonsStates)
        {
            var child:DisplayObject = this.getChildByName(buttonName);
            child.visible = buttonsStates[buttonName];
        }
    }
    
    // Saves the visible satatus to false
    function setVisibilityToFalse(target:*) {
        buttonsStates[target.name] = false;
        target.visible = false;
    }
    
  2. ボタンの可視性を確認するたびに、checkVisibility()関数を呼び出す必要があります。たとえば、ボタンリストに戻るたびに。

  3. 最後に、各ボタンのイベントハンドラーは次のようになっている必要があります。

    function a1mouseClick(mouse:MouseEvent) {
        setVisibilityToFalse(mouse.currentTarget); // Saves the visible state to false
        gotoAndStop("A1");
        trace("Going to A1");
    }
    

編集したファイルはこちらからダウンロードできますhttp://cl.ly/Lt6X

于 2013-01-01T23:55:51.840 に答える