“Left-MouseDown + MouseMove”阻止其他事件触发

时间:2016-03-25 00:05:04

标签: javascript events canvas lag mousemove

我遇到了一个奇怪的问题,我担心它实际上是一个浏览器问题。

我正在开发一个websocket多人游戏。游戏循环在requestAnimationFrame上运行,位置/游戏数据通过Websockets接收。

我的问题是,无论何时按住鼠标左键并移动鼠标,都会发生导致其他事件停止的事情(例如没有喘息的空间来执行它们)当mouse1被释放时“或”你停止移动鼠标,所有被阻止的事件开火。动画循环不受影响,并按原样运行。

但是我的socket.onmessage事件停止了,并且没有更新任何职位等(使其看起来像服务器滞后)。

我试图解除所有鼠标事件的绑定,问题是一样的。

我还尝试将stopPropagation()preventDefault()return false添加到所有document鼠标事件中,但问题仍然存在。

我已经记录了时间表来检查阻止它的东西,但什么都没有。除了延迟事件的堆叠。

时间轴基本上是两个重复的功能。

  1. tick = requestAnimationFrame
  2. 调用的函数
  3. data =功能 由socket.onmessage事件
  4. 调用

    正常:

      

    勾选,勾选,勾选,勾选,勾选,数据,勾选,勾选,勾选,勾选,数据 ....等等..

    鼠标左键+鼠标移动:

      

    勾选,勾选,勾选,勾选,勾选,勾选,勾选,勾选,勾选, * Mouse1已发布* 数据,数据,数据,数据

    注意:这只发生在鼠标左键,所以我可以使用右键进行拍摄等,问题就不存在了。但这将是一个糟糕的解决方案,因为每个人都会期望它是mouse1,并且当他们持有mouse1时游戏仍然会滞后,即使它没有任何功能。

    我发现以下线程存在类似问题,但没有一个解决方案实际有效。

    JavaScript Canvas Left-Mouse-Down & Move Lag

    Html Canvas lag when Left Mouse is down and moving on Chrome

    Mouse down and moving drops chrome canvas to 30FPS using CreateJS

    CodePen example 重现此问题。

    客户端需要施加压力,因此您需要打开内置的“控制台”(它正在进行一些繁重的日志记录以推送客户端)。 你需要一台120hz +显示器来激发效果。

    我知道它看起来很愚蠢,但如果你有一台旧电脑并且无法在你的60hz显示器上运行60fps,你会遇到同样的问题。这纯粹是为了引发这个问题。即使客户端丢弃了fps,游戏也需要运行。

    YouTube video 展示了这个问题。

0 个答案:

没有答案