Actionscript 3.0 Слушатель событий клавиатуры не реализует функцию - PullRequest
0 голосов
/ 05 июля 2011

У меня есть прослушиватель событий клавиатуры для прослушивания 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 
  }
}

Ответы [ 3 ]

1 голос
/ 05 июля 2011

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

stage.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
stage.addEventListener(KeyboardEvent.KEY_DOWN, unrotate);
0 голосов
/ 18 июля 2015

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

0 голосов
/ 10 ноября 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 
      }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...