我有CanvasElement,它要求在单击时锁定指针,然后使用onMouseMove侦听器(将在测试第一人称控件)反复将MovementX和MovementY传递给函数。

第一次(在页面加载后立即)运行良好,但是如果我按Escape键并再次单击 Canvas ,它将成功锁定光标,但不会生成MouseEvent传递给onMouseMove侦听器。

如果我按Escape键并将鼠标移到文档外部(不受标记限制的任何地方),请将其移回到文档中并单击 Canvas ,一切将再次正常运行。

有什么想法导致这种奇怪的行为吗?

_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();
  }
});

所有描述的行为都包含在这些代码行中。

最佳答案

我不知道element.requestPointerLock()是做什么的,但是
MDN - Element.requestPointerLock指出您应该听pointerlockchangepointerlockerror来查看请求是否成功。您似乎也没有使用document.exitPointerLock()

MDN Pointer Lock API似乎是一个不错的介绍。

09-19 06:36