Слушатель событий клавиатуры Actionscript 3.0 не реализует эту функцию

У меня есть прослушиватель событий клавиатуры для прослушивания key_Down букв A и D, но я получаю ошибку и:

1119: доступ к возможно неопределенному свойству A через ссылку со статическим типом Class.

Когда я использую

function rotate(evt:KeyboardEvent):void
{
    if (evt.keyCode==68) {
    evt.currentTarget.rotation = 90 }
}

function unrotate(evt:KeyboardEvent):void
{
    if (evt.keyCode==65) {
    evt.currentTarget.rotation = 0 }
}

вместо (keyBoard.A и keyboard.D я больше не получаю ошибку, но функция, которая вращает изображения, не работает. Дело в том, что она не может распознать текущую цель и реализовать функцию или что-то еще ?

ti.border = true
ti.addEventListener(TextEvent.TEXT_INPUT, onInput);

function onInput(event:TextEvent):void {
  if(ti.text.search('a')!=-1) load_image("http://i54.tinypic.com/anom5d.png", "ottefct");
  else if(ti.text.search('b')!=-1) load_image("http://i53.tinypic.com/2dv7dao.png", "rnd");
  else if(ti.text.search('c')!=-1) load_image("http://i51.tinypic.com/m8jp7m.png", "ssd");
}

var loaded_images:Dictionary = new Dictionary();

function load_image(url:String, id_name:String)
{
  var loader:Loader = new Loader();
  loader.name = id_name;
  var url_req:URLRequest = new URLRequest(url);
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadingComplete);
  loader.load(url_req);
}

function onLoadingComplete(evt:Event):void
{
  var img_name:String = evt.currentTarget.loader.name
  var spr_box:Sprite = new Sprite();
  spr_box.addChild(evt.currentTarget.loader);

  spr_box.mouseChildren = false;
  spr_box.doubleClickEnabled = true;

  spr_box.addEventListener(MouseEvent.MOUSE_DOWN, drag);
  spr_box.addEventListener(MouseEvent.MOUSE_UP, drop);
  spr_box.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
  spr_box.addEventListener(KeyboardEvent.KEY_DOWN, unrotate);

  spr_box.width = 124;
  spr_box.height = 180;
  spr_box.x = 430;
  spr_box.y = 425;


  this.addChild(spr_box);
  loaded_images[img_name] = spr_box;
}


function drag(evt:MouseEvent):void
{
  evt.currentTarget.startDrag()
}

function drop(evt:MouseEvent):void
{
  evt.currentTarget.stopDrag()
}

function rotate(evt:KeyboardEvent):void
{
  if (evt.keyCode==Keyboard.D) {
    evt.currentTarget.rotation = 90 
  }
}

function unrotate(evt:KeyboardEvent):void
{
  if (evt.keyCode==Keyboard.A) {
    evt.currentTarget.rotation = 0 
  }
}

person starfox55    schedule 05.07.2011    source источник


Ответы (3)


Вам нужно прикрепить KeyBoardEvent к сцене, а не объект

stage.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
stage.addEventListener(KeyboardEvent.KEY_DOWN, unrotate);
person locrizak    schedule 05.07.2011
comment
Я пробовал это, но у меня возникла другая ошибка. Ошибка: ошибка № 2071: класс Stage не реализует это свойство или метод. при ошибке $ / throwError () в flash.display :: Stage / установить ротацию () в project_fla :: MainTimeline / unrotate () - person starfox55; 06.07.2011
comment
если у вас прописная буква S, сделайте ее строчной, а также попробуйте без чего-либо, так что просто addEventListener(KeyboardEvent.KEY_DOWN, rotate); - person locrizak; 06.07.2011
comment
Это тоже не сработало. Без stage я больше не получаю сообщение об ошибке, но функция все еще не реализуется. - person starfox55; 06.07.2011
comment
Я думаю, в этом проблема, потому что в одной из функций поворота я помещаю код трассировки, который будет отображаться в поле вывода, нажата клавиша A, и функция даже не отслеживает это, поэтому я не знаю, есть ли у eventListeners поднимают keyDown или что-то еще не так. - person starfox55; 06.07.2011

или даже лучше с помощью пальцев

on(stage).keyDown += rotate + unrotate;

Имейте в виду, что вам нужно изменить evt.currentTarget в ваших слушателях, чтобы он указывал на экземпляр DisplayObject, который вы хотите повернуть.

Более того, было бы понятнее иметь один stage_keyDownHandler вместо rotate и unrotate:

 stage_keyDownHandler(evt:KeyboardEvent):void
 {
      if (evt.keyCode == Keyboard.D) {
          yourObjToRotate.rotation = 90 
      }
      else if (evt.keyCode == Keyboard.A) {
          yourObjToRotate.rotation = 0 
      }
 }
person average Joe    schedule 10.11.2011

Когда вы нажимаете на объект, он выбирает его текущую цель. Но когда вы нажимаете код клавиши, как он может выбрать свою цель? Вы должны определить его имя экземпляра при нажатии кода клавиши.

person Tareq Rahman    schedule 18.07.2015