我创建了一个画布,我已经添加了鼠标事件:
canvas = document.getElementById('canvas');
context = canvas.getContext('2d');
canvas.width = screenWidth;
canvas.height = screenHeight;
...
// CALLED AT START:
function setup() {
// Mouse movement:
document.onmousemove = function(e) {
e.preventDefault();
target.x = e.pageX;
target.y = e.pageY;
angle = Math.atan2((target.y - localPlayer.getY()),
(target.x - localPlayer.getX()));
// Distance to mouse Check:
var dist = Math.sqrt((localPlayer.getX() - target.x)
* (localPlayer.getX() - target.x) + (localPlayer.getY() - target.y)
* (localPlayer.getY() - target.y));
var speedMult = dist / (canvas.height / 4);
socket.emit("update", {
...
});
}
document.onmousedown = function(e) {
e.preventDefault();
}
}
现在的问题是,当我按住鼠标左键并同时移动鼠标时,我的游戏滞后了很多 . 只需移动鼠标就不会造成任何延迟 . 我在chrome和firefox上测试了这个 . 似乎我只能在chrome上重新创建问题 . 使用鼠标中键或右键在游戏中具有相同的行为并且不会导致延迟 . 仅当使用鼠标左键导致滞后时 .
我四处寻找答案,发现我应该像这样阻止默认行为:
e.preventDefault();
但这并没有解决问题 . 我还尝试在屏幕上更新代表鼠标位置的数字 . 它正常更新 . 只有游戏本身就滞后了 . 可能是按下左键时从不调用onMouseMoved?但是为什么用中键和右键调用呢?
问题应该是我在move方法中调用的代码,因为当我没有按住左键时它工作正常,并且它在firefox上运行良好 . 必须有其他事情发生 .
编辑:我决定在chrome上录制,看看发生了什么 . 结果如下:
有什么奇怪的,当我按下鼠标中键或右键时,游戏也会做同样的事情,但它根本没有延迟 . 你在做什么铬?
编辑:在这里测试:www.vertix.io注意,不是每个人似乎都能重现这个问题 .
感谢您的时间 .