键盘AS3检测

时间:2012-10-11 22:01:05

标签: actionscript-3 addeventlistener

我知道有很多问题,但我真的遇到了麻烦。

我只在第一帧中有这段代码:

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 个答案:

答案 0 :(得分:1)

mc需要在displayList上才能接收键盘事件。

var game = new Game(this);
addChild( game );

答案 1 :(得分:1)

如果没有更多的代码,很难确切地说出这里出了什么问题,但是如果esc对象没有焦点(鼠标没有点击)那么键盘事件就不会传播通过它,因此处理程序赢了好了。

答案 2 :(得分: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()");
}

答案 3 :(得分:0)

if (esc.stage) esc.stage.addEventListener(KeyboardEvent.KEY_UP, controlTeclat);
else trace("Stage is inaccessible!");

最佳做法是将键盘侦听器分配给舞台,以便它们始终对键盘事件做出反应。 " ESC"是你的文档课,但它不是舞台,所以我们使用" stage" " esc"的财产进入那里。