我知道有很多问题,但我真的遇到了麻烦。
我只在第一帧中有这段代码:
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()函数从未被调用,跟踪没有打印。没有错误显示,面团。
答案 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"的财产进入那里。