我有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指出您应该听pointerlockchange
和pointerlockerror
来查看请求是否成功。您似乎也没有使用document.exitPointerLock()
。
MDN Pointer Lock API似乎是一个不错的介绍。