Попробуйте
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
вместо
addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
Поскольку ваш Sprite не имеет видимой области, он не будет получать ввод с клавиатуры или мыши.
Также функция STEP () вызовет переполнение стека, потому что оно бесконечно рекурсивно.
Если вы хотите, чтобы основной цикл периодически вызывался, попробуйте использовать обработчик ENTER_FRAME или таймер.
Примерно так:
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 будет step и т. Д. Я думаю, вам лучше придерживаться этих распространенных схем именования.
И еще одна вещь. Возможно, вам не следует создавать новый экземпляр TextField каждый раз, когда вы хотите вывести некоторый текст. Я думаю, одно текстовое поле сделает это в вашем случае. Так что создайте и добавьте текстовое поле в некоторый вид метода init, который вы вызываете при запуске класса, а затем просто используйте свойство text этого текстового поля для написания ваших сообщений.