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

您可以将键盘侦听器添加到舞台本身。您还可以使用“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 回答
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 回答