2

cs6 で実行されている flash actionscript 3 の場合、関数がマウス クリック イベントの後にのみ実行されるという問題があります。オンラインで同様の問題があること。

これは、私が作成しているプログラムの基本的なテンプレートです。これはフレーム 1 にあります。可能なボタンの1つをクリックすると、それが正しいボタンであるかどうかを確認し、次のフレームに移動するように設計されています

    stop();
    var buttons:Array=new Array(oport); //list of buttons
    var correct:String="oport"; //button name
    var gotoFrame:int=2;
    var win:String=null;

    const NEXT_FRAME:int=0;

    var removeOtherListeners:Function=function():void{};

    addListeners();
    function addListeners():void {
        for (var i:int=0; i<buttons.length; i++) {
            buttons[i].addEventListener(MouseEvent.CLICK, checkButton);
        }
    }

    function removeListeners():void {
        for (var i:int=0; i<buttons.length; i++) {
            buttons[i].removeEventListener(MouseEvent.CLICK, checkButton);
        }
    }

    //checks button onclick and applies the functions above        
    function checkButton(e:MouseEvent):void {   
        removeListeners();
        removeOtherListeners();
        removeOtherListeners=function():void{};
        Mouse.show();
        if (e.currentTarget.name==win) {
            gotoAndStop("win");
        } else if (e.currentTarget.name==correct) {
            if (gotoFrame<=0) {
                nextFrame();
            } else {
                gotoAndStop(gotoFrame);
            }
        } else {
            gotoAndStop("lose");
        }
    }

これは 2 番目のフレームにあり、このコードは cs4 用に設計されていますが、それでも動作するはずです。これは問題を提示するフレームです。フレーム 1 からこれに入る場合、入力を開始する前に画面をクリックする必要があります。画面をクリックする前に入力しても何も起こりません。

var lDown:Boolean = false;
var sDown:Boolean = false;
var dDown:Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
function onKeyBoardDown(e:KeyboardEvent):void
{
        if (e.keyCode == KeyCodes.L)
        {
                lDown = true;
        }
        if (lDown == true)
        {
                if (e.keyCode == KeyCodes.S)
                {
                        sDown = true;
                }
        }
        if (sDown == true)
        {
                if (e.keyCode == KeyCodes.D)
                {
                        stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
                        gotoAndStop(5);
                }
        }

}

これは KeyCodes で参照されるクラスです

package  {

    public class KeyCodes {
        public static const A:uint = 65;
        public static const B:uint = 66;
        public static const C:uint = 67;
        public static const D:uint = 68;
        public static const E:uint = 69;
        public static const F:uint = 70;
        public static const G:uint = 71;
        public static const H:uint = 72;
        public static const I:uint = 73;
        public static const J:uint = 74;
        public static const K:uint = 75;
        public static const L:uint = 76;
        public static const M:uint = 77;
        public static const N:uint = 78;
        public static const O:uint = 79;
        public static const P:uint = 80;
        public static const Q:uint = 81;
        public static const R:uint = 82;
        public static const S:uint = 83;
        public static const T:uint = 84;
        public static const U:uint = 85;
        public static const V:uint = 86;
        public static const W:uint = 87;
        public static const X:uint = 88;
        public static const Y:uint = 89;
        public static const Z:uint = 90;


        public function KeyCodes() {
            // constructor code
        }

    }

}

回答やアドバイスをありがとうございます。

4

1 に答える 1

1

最も可能性が高いのは、ブラウザが原因のフォーカスの問題です。セキュリティ対策として、ブラウザはクリックしないと Flash にフォーカスを与えません。解決策は、JavaScript を使用して SWF がページの読み込みに集中できるようにすることです。

Adobe のソリューションを参照してください > http://helpx.adobe.com/flash/kb/give-keyboard-focus-embedded-movie.html

そして、すべてのコードをドキュメント クラスに入れてみることをお勧めします。これにより、コードをフレーム スクリプトに分離することで発生する可能性のあるバグがなくなります。同様に、コードを再利用可能にします。

于 2014-10-22T01:58:46.997 に答える