打印

[AS3] AS3按键注册焦点问题

AS3侦听按键后还要注册焦点才能生效
在贞上我知道用stage.focus = xx,
但在外部类中我就不知道怎样定位了,试了很多方法都不生效,在外部类中究竟怎么才能正确注册焦点
只要继承自 DisplayObject 的类都有 stage 属性, 直接访问即可

public class MySprite extends Sprite
{
public function MySprite () {
stage.focus...
}
}
但是我用stage.focus = xx的时候就会报错:无法访问空对象引用的属性或方法
你的 xx 是哪个? trace(xx) 是什么结果?

我这边没有问题, 你的代码是? 你的环境是?

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
trace(xx)结果是[object Sprite]
package {
       import flash.display.Sprite;
       import flash.display.DisplayObject;
       import flash.events.*;
       public class aa extends Sprite{
              public function KeyDown() {
                     var kk =new Sprite()
                                                stage.focus = kk;
                     kk.addEventListener(KeyboardEvent.KEY_DOWN, KeyDownListener)
              }
              ........
}

TOP

你还没有把 kk 添加到场景中呢,
addChild(kk);
stage.focus = kk;

TOP

我试过,添加了也没用,只要有stage.focus = kk就报错:无法访问空对象引用的属性或方法

TOP

对了  我上面贴的类名和构造函数不一致,只是我发帖子的时候打错了,原文件是一致的

TOP

完整代码给我看看, 用的 flash 9 alpha 还是 flex 2 编译?

TOP

package {
       import flash.display.Sprite;
       import flash.display.DisplayObject;
       import flash.events.*;
       public class KeyDown extends Sprite{
              public function KeyDown() {
                     var kk =new Sprite()
                     addChild(kk)
                     stage.focus = kk
                     kk.addEventListener(KeyboardEvent.KEY_DOWN, KeyDownListener)
              }
              private function KeyDownListener(event:KeyboardEvent):void {
                     trace(1)
              }
       }
}

TOP

用的是FLASH9  ALPHA

TOP

你在实例化 KeyDown 的时候还没有被 addChild 到场景中, 自然访问不到 stage 了.
方法有俩, 做一个父类, 实例化 KeyDown 后, 在 EVENT.ADDED 事件触发时再进行 focus
库中将 KeyDown 绑定到元件上再拖到场景中

TOP

但是如果不在类中写,直接写在贞上,如:
var ee =new Sprite()
stage.focus = ee
ee.addEventListener(KeyboardEvent.KEY_DOWN, aa)
function aa(event){
       trace(1111)
}
这样就可以,并不需要addChild,这是为什么

TOP

因为这个时候 stage 是 root 的 stage, 而不是 ee 的

TOP

哦 明白原因了 问题也解决了 多谢版主

TOP

认为此贴有价值
建议转AS3版面

TOP

方法三:用 if 语句判断下就可以了.  将 stage.focus = xx; 改为 if(stage != null){ stage.focus = xx; }
天涯同是沦落人,?.
人生何处不相逢,?.

TOP