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

Слушатели событий keyBoard вызывают функции поворота и разворачивания и на основе клавишных входов (A и D) реализуют любую из функций и поворачивают изображение или возвращают его в исходное вертикальное положение.Тем не менее, я не смог заставить функцию работать.Когда я нажимаю клавиши A или D на клавиатуре, ничего не происходит.Я даже поместил trace () в одну из функций, чтобы посмотреть, будет ли эта функция реализована, но я ничего не понимаю.Я вставил свои сценарии ниже.Почему функции не работают?Срабатывает ли список прослушивателей или есть конфликты?Я не получаю никаких сообщений об ошибках.

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==68) {
    evt.currentTarget.rotation = 90 }
}

function unrotate(keyEvent:KeyboardEvent):void
{
    if (evt.keyCode==65) {
    evt.currentTarget.rotation = 0; 
    trace("A key pressed")}
}

1 Ответ

4 голосов
/ 06 июля 2011

Поскольку спрайты не обязательно отправляют события клавиатуры.Вместо этого добавьте слушателя на сцену

stage.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
stage.addEventListener(KeyboardEvent.KEY_DOWN, unrotate);

Вам нужно будет отслеживать, какой "spr_box" выбран, я полагаю, вы сделаете это двойным щелчком мыши.Создайте переменную с именем currentSpr_box, а затем в функции прослушивателя установите currentSpr_box в качестве currentTarget

spr_box.addEventListener(MoustEvent.DOUBLE_CLICK, onSelect); //add this when creating spr_box in onLoadingComplete

private function onSelect(event:MouseEvent):void{
   currentSpr_box = event.currentTarget as Sprite;
}

. В ваших функциях поворота вам нужно установить currentSpr_box.rotation

Обновить ... полный пример кода

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");
    }

stage.addEventListener(KeyboardEvent.KEY_DOWN, rotate);
stage.addEventListener(KeyboardEvent.KEY_DOWN, unrotate);

var loaded_images:Dictionary = new Dictionary();
var currentSpr_Box:Sprite;

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(MouseEvent.DOUBLE_CLICK, onSelect);

    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 onSelect(evt:MouseEvent):void{
    currentSpr_box = event.currentTarget as Sprite;
}

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

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

function rotate(evt:KeyboardEvent):void
{
    if (currentSpr_box != null && evt.keyCode==68)  currentSpr_box.rotation = 90;
}

function unrotate(keyEvent:KeyboardEvent):void
{
    if (currentSpr_box != null && evt.keyCode==65) currentSpr_box.rotation = 0; 
}
...