1

これについてはたくさんの質問があることは知っていますが、これを機能させるのに本当に苦労しています。

私は最初のフレームにこのコードしか持っていません:

var game = new Game(this);

ゲームのクラスではたくさんのものがあります

package  {

import flash.display.*;
import flash.ui.*;
import flash.events.*;




public class Game extends MovieClip {


    public function Game(esc) {
        var camp = new Camp(); //camp és l'escenari, el conjunt de celles
        var player = new Player();

        esc.addEventListener(KeyboardEvent.KEY_UP, controlTeclat);

        camp.mostraInterficie(esc);

        player.situaPlayer(esc);            

    }

    public function controlTeclat(ev){
        switch(ev.keyCode){
            /*case 37: player.moveLeft();break;
            case 38: player.moveUp();break;
            case 39: player.moveRight();break;
            case 40: player.moveDown();break;
            case 32: player.dropBomb();break;*/
        }
        trace ("hi");
    }
}

}

問題は、controlaTeclat()関数が呼び出されず、トレースが出力されないことです。エラーは表示されません、生地。

4

4 に答える 4

1

キーボードイベントを受信するには、mcがdisplayListに含まれている必要があります。

var game = new Game(this);
addChild( game );
于 2012-10-11T22:07:24.083 に答える
1

コードを追加しないと、ここで何が問題になっているのかを正確に判断するのは困難ですが、escオブジェクトにフォーカスがない場合(マウスでクリックされていない場合)、キーボードイベントはそのオブジェクトを介して伝播されないため、ハンドラーは起動しません。 。

于 2012-10-11T22:07:58.850 に答える
0
if (esc.stage) esc.stage.addEventListener(KeyboardEvent.KEY_UP, controlTeclat);
else trace("Stage is inaccessible!");

ベストプラクティスは、キーボードリスナーをステージに割り当てて、キーボードイベントに常に反応するようにすることです。「esc」は一見あなたのDocumentクラスですが、ステージではないので、「esc」の「stage」プロパティを使用してそこにアクセスします。

于 2012-10-12T05:25:25.637 に答える
0

キーボードリスナーをステージ自体に追加するだけです。'stage.focus'でフォーカスを設定して、最初にステージをクリックしなくてもイベントを受信できるようにすることもできます。

stage.addEventListener( KeyboardEvent.KEY_UP, keyupHandler );

//if you want to, you can set focus like this:   
stage.focus = stage; //or some other object


private function keyupHandler(e:KeyboardEvent):void 
{
    trace("keyupHandler()");
}
于 2012-10-12T00:40:56.680 に答える