2011-07-05 131 views
0

我有这样的键盘事件侦听器来侦听字母A的KEY_DOWN和d,但我最终和错误:ActionScript 3.0中的键盘事件监听器没有实现功能

1119:可能未定义的属性A的访问通过一个静态类型的引用。

当我使用

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 
    } 
} 

回答

1

您需要的KeyBoardEvent附加到舞台不是一个O bject

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

我试过这个,但我结束了另一个错误。 **错误:错误#2071:Stage类不实现此属性或方法。 \t在错误$/throwError() \t在flash.display使用::舞台/套旋转() \t在project_fla :: MainTimeline/unrotate()** – starfox55

+0

如果你有一个大写的 “S”,使其小写也尝试没有任何东西,所以只是'addEventListener(KeyboardEvent.KEY_DOWN,旋转);' – locrizak

+0

这也没有工作,以及。没有**阶段**我不再有错误,但功能仍未实现。 – starfox55

0

甚至更​​好的使用Fingers

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

有想法,你有你的听众改变evt.currentTarget,使其指向要旋转的DisplayObject一个实例。

更重要的是,它会更清楚有一个stage_keyDownHandler而不是rotateunrotate

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

当你点击的对象,它选择它的当前目标。但是当你按下键码时,它如何选择它的目标?按键代码时必须定义其实例名称。