3

我在处理 DartFlash 上的键盘事件时遇到了麻烦。我不知道我在这里做错了什么。有人可以帮助我吗?我的目的是创建一个非常简单的行走角色,每次我按下一个键,它都会在 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}");
   });
 }
4

1 回答 1

5

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

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

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

query('#stage').focus();
于 2013-01-02T22:07:46.300 回答