2

キャンバス要素のkeyDownイベントにイベントハンドラーをアタッチしようとしています。これが私のコードの簡略版です。

class CanvasFun{

  CanvasElement canvas;

  CanvasFun(this.canvas){
    print("Game is loading!");
    this.canvas.onKeyDown.listen(handleInput);
  }

  void handleInput(e)
  {
    //breakpoint is never hit
    print(e.keyCode);
  }
}

描画コードの一部を削除しました。私のメイン関数では、canvas要素をクエリしてCanvasFunコンストラクターに渡すだけです。

私もこの方法でそれをやってみました:

void main() {

  var canvas = query("#Game");

  canvas.onKeyDown.listen(handleInput);

  var canvasFun = new CanvasFun(canvas); 

}
void handleInput(e)
{
  print(e.keyCode);
}
4

4 に答える 4

3

John McCutchanは、キーボード入力の処理に役立つ素晴らしいDartパッケージを作成しました。あなたはここでそれについてもっと読むことができます:http://dartgamedevs.org/blog/2012/12/11/keyboard-input/

このライブラリは、入力を「正しく」処理するのに役立つことに注意してください。入力処理で「作業」を行う必要はありません。代わりに、キーが押されたことを登録するだけです。requestAnimationFrameコールバック内で押されたキーの状態を確認できます。

お役に立てば幸いです。

于 2013-02-07T00:43:29.743 に答える
3

イベントが発生しない理由は、ドキュメント(または入力などの他の要素)にフォーカスがあるためです。実際、フォーカスされている場合でも、canvas要素はイベントを発生させません。入力要素のように、いくつかの要素はそうします。

解決策は、ドキュメントまたはウィンドウからキーダウンイベントをリッスンすることです。

window.onKeyDown.listen(handleInput);
document.onKeyDown.listen(handleInput); // You already noticed this worked.
于 2013-02-07T12:44:31.157 に答える
2

canvas-elementがKeyboardEventsを受け入れるようにするための回避策があります。

DartFlashでのKeyboardEventsの処理に関する問題

tabindex-属性を-elementに追加するcanvasと、フォーカスを取得でき、KeyboardEventsを受け取ります。

于 2013-02-07T17:43:32.987 に答える
1

キャンバス要素ではなくドキュメントにイベントを登録すると、機能するように見えます。

document.onKeyDown.listen(handleInput);
于 2013-02-06T19:22:32.807 に答える