1

クリック時にポインターロックを要求する CanvasElement があり、onMouseMoveリスナーを使用してmotionXとmotionYを関数に繰り返し渡します(一人称コントロールをテストしています)。

初めて(ページの読み込み直後)は正常に動作しますが、エスケープを押してキャンバスを再度クリックすると、カーソルは正常にロックされますが、リスナーMouseEventに渡すは生成されません。onMouseMove

Esc キーを押してマウスをドキュメントの外 (マークアップで管理されていない場所) に移動し、ドキュメント内に戻してキャンバスをクリックすると、すべてが再び完全に機能します。

この奇妙な動作の原因は何ですか?

_canvas.onMouseMove.listen((MouseEvent e) {
  if (document.pointerLockElement == _canvas) {
    print(e.movement); // debug print
    orientateCamera(e.movement);
  }
});

_canvas.onClick.listen((e) {
  if (document.pointerLockElement == null) {
    _canvas.requestPointerLock();
  }
});

説明されているすべての動作は、これらのコード行に含まれています。

4

1 に答える 1

0

私は何をするのか分かりelement.requestPointerLock()ませんが、 MDN - Element.requestPointerLockは、リクエストが成功したかどうかを聞いて確認する必要があると述べていますpointerlockchange。使用していないように見えるpointerlockerrorもあります。document.exitPointerLock()

MDN Pointer Lock APIは良い入門書のようです。

于 2014-02-27T11:11:57.760 に答える