ввод с клавиатуры с actionScript - PullRequest
       5

ввод с клавиатуры с actionScript

0 голосов
/ 14 августа 2010

Я пишу в чистом ActionScript в блокноте с 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, я не знаю, правильно ли я установил игровой цикл, поэтому дайте мне знать, если это нужно исправить.

1 Ответ

1 голос
/ 14 августа 2010

Попробуйте

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 этого текстового поля для написания ваших сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...