1

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

它第一次工作正常(页面加载后立即),但如果我按下转义键并再次单击画布,它会成功锁定光标但不会生成MouseEvent传递给onMouseMove侦听器的 a。

如果我按下退出键并将鼠标移到文档之外(任何不受标记控制的地方),将其移回文档并单击画布,一切都会再次完美运行。

任何想法是什么导致了这种奇怪的行为?

_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

我不知道 MDN 做什么element.requestPointerLock(),但 Element.requestPointerLock声明您应该听pointerlockchangepointerlockerror查看请求是否成功。还有一个document.exitPointerLock()你似乎没有使用。

MDN Pointer Lock API似乎是一个很好的介绍。

于 2014-02-27T11:11:57.760 回答