我用flex作为编译器在记事本中编写纯动作脚本。这是我的代码
package
{
import flash.display.*;
import mx.core.*;
import flash.events.*;
import mx.collections.*;
import flash.geom.*;
import mx.controls.*;
import flash.text.*;
import mx.events.*;
import mx.styles.*;
import mx.containers.*;
public class MAIN extends Sprite
{
public var APPLICATION:Application = Application(Application.application);
public var FRAME:int = 0;
public function MAIN()
{
addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
STEP();
}
public function STEP():void
{
FRAME ++;
STEP();
}
public function keyDownHandler(event:KeyboardEvent):void
{
var keyDownText:TextField = new TextField();
keyDownText.text = "Key code: " + event.keyCode;
this.addChild(keyDownText);
}
}
}
我想要的是我碰巧在屏幕上画出的任何键(虽然实际上我认为它只是它对应的ascii数字,但无关紧要)。现在虽然一切都只是空白。另一件事是因为我没有使用任何mxml我不知道我是否已正确建立游戏循环所以让我知道是否需要修复。
答案 0 :(得分:1)
尝试
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
而不是
addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
由于您的Sprite没有可见区域,因此不会接收键盘或鼠标输入。
STEP()函数也会导致堆栈溢出,因为它是无限递归的。
如果您想要定期调用主循环,请尝试使用ENTER_FRAME处理程序或Timer。
这样的事情:
public function MAIN()
{
addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
addEventListener(Event.ENTER_FRAME,STEP);
}
private function STEP(e:Event):void {
FRAME++;
}
要停止它,请执行以下操作:
removeEventListener(Event.ENTER_FRAME,STEP);
不确定为什么使用ALL CAPS来获取某些方法和变量。虽然它不是语言要求,但所有上限通常都是为常量保留的。方法名称使用camelCase。类型使用PascalCase(如camelCase,但首字母大写)。因此,你的课程将是Main,FRAME将是fram,STEP将是步骤等等。我认为你最好坚持这些常见的命名方案。
另一件事。每次要输出一些文本时,您可能不应该创建新的TextField实例。我想,一个文本域会在你的情况下做到。因此,在启动类时调用某种init方法创建和addChild文本字段,然后只使用此textfield的text属性来编写消息。