3

DartFlashでKeyboardEventsを処理するのに問題があります。ここで何が間違っているのかわかりません。誰かが私を助けてもらえますか?私の意図は、非常に単純な歩行キャラクターを作成することです。キーを押すたびに、キーがxとyに移動し、DartFlashAPIの理解を開始します。完全なソースコードは次のとおりです。

 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」属性をcanvas要素に追加するだけで、その後、KeyboardEventsを受け取ります。「tabindex」が設定されていない場合、キャンバスはキーボードイベントを受信しません。

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

キャンバスにもフォーカスが必要です。キャンバスをクリックするか、問題のあるフォーカスを設定することで、フォーカスを取得できます。

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