在DartFlash上​​处理KeyboardEvents的问题

时间:2013-01-02 19:53:41

标签: dart

我在DartFlash上​​处理KeyboardEvents时遇到问题。 我不知道我在这里做错了什么。有人能帮助我吗? 我的目的是创建一个非常简单的行走角色,每当我按下一个键时,它会在x和y中移动,只是为了开始理解DartFlash API。 这是完整的源代码:

 class Character extends Sprite
 {
   TextureAtlas _atlas;
   Bitmap _currentBitmap;
   int _direction;

   String _name;

   Character(this._name, this._atlas)
   {
     this._direction=Direction.down;
     this._currentBitmap=this.getBitmap("stand", this._direction);
     addChild(this._currentBitmap);
   }

   String get name => this._name;

   Bitmap getBitmap(String name, [int direction, int number])
   {
     if(direction == null)
     {
       return new Bitmap(this._atlas.getBitmapData(name));
     } else if (number == null) 
     {
       return new Bitmap(this._atlas.getBitmapData("${name}-${Direction.getDirectionName(direction)}"));
     }
     return new Bitmap(this._atlas.getBitmapData("${name}-${Direction.getDirectionName(direction)}-${number}"));
   }
 }

 Character dk;

 void keyboardListener(KeyboardEvent ke) {
   print("Key code: ${ke.keyCode}");
   dk.x+=1;
   dk.y+=1;
 }

 void main()
 {
   Stage mainStage = new Stage("mainStage", html.document.query("#mainStage"));
   RenderLoop renderLoop = new RenderLoop();
   renderLoop.addStage(mainStage);
   Resource resource=new Resource();
   resource.addTextureAtlas("DarkKnight", "resources/DarkKnight.json", TextureAtlasFormat.JSONARRAY);
   resource.load().then((res)
   {
     print(resource.toString());
     dk=new Character("DarkKnight", resource.getTextureAtlas("DarkKnight"));
     dk.x=10;
     dk.y=10;
     mainStage.addChild(dk);
     dk.addEventListener(KeyboardEvent.KEY_DOWN, keyboardListener, false);
     mainStage.focus=dk;
     print("${mainStage.focus.name}");
   });
 }

1 个答案:

答案 0 :(得分:5)

有一个简单的解决方法。只需添加一个" tabindex"属性为canvas元素,之后您将收到KeyboardEvents。如果" tabindex"未设置,则画布不会接收键盘事件。

<canvas id="stage" width="800" height="600" tabindex="1"></canvas>

画布也需要关注。您可以通过单击画布或有问题地设置焦点来获得焦点:

query('#stage').focus();