我正在使用用户可以滚动的“无限”画布为在线游戏开发地图编辑器/视线计算器。我的目标是从玩家的位置(当前是静态的)到光标位置画一条线。到目前为止,我可以很好地绘制线条,但是当我将画布滚动到足够远时,我会遇到一个非常糟糕的视觉错误。该功能似乎draw()
不再正确清除屏幕。我可以通过删除该代码块来确认该行是罪魁祸首。
我的(精简)drawLine()
功能:
function drawLine() {
context.beginPath();
context.moveTo(150, 300);
context.lineTo(Mouse.x, -Mouse.y);
context.lineWidth = 1;
context.stroke();
context.closePath();
}
我的draw()
功能(变量grid
只是一个重复的模式):
function draw() {
context.clearRect(-translatedX, -translatedY, window.innerWidth, window.innerHeight);
context.rect(-window.innerWidth, -window.innerHeight, window.innerWidth * 2, window.innerHeight * 2);
context.fillStyle = grid;
context.fill();
}
还有我pan()
触发 onmouseove 的函数:
function pan(e) {
var evt = e || event;
if(dragging == true) {
deltaX = evt.offsetX - lastX;
deltaY = evt.offsetY - lastY;
translatedX += deltaX;
translatedY += deltaY;
context.translate(deltaX, -deltaY);
lastX = evt.offsetX;
lastY = evt.offsetY;
}
Mouse = {
x: evt.offsetX - (window.innerWidth / 2 + translatedX),
y: evt.offsetY - (window.innerHeight / 2 + translatedY)
}
draw();
}
如果需要更多信息,我很乐意提供。
编辑:更新截图和链接: