[英]Canvas Panning All Elements Including Minimap
我目前正在向畫布上添加一個迷你地圖,該地圖基本上會顯示並遵循主畫布上顯示的內容。 我的主畫布具有縮放和平移功能。 我為小地圖繪制了一個rect,它顯示了畫布上顯示的內容。 但是,當我平移或縮放它時,它對小地圖也一樣。
下面的代碼是我的draw方法,它在畫布和小地圖上進行繪制。
redraw();
context.save();
context.translate(canvas.width / 2, canvas.height / 2);
canvas.style.border = "red 1px solid";
object.mPosition = new Vector(0,0);
object.draw(context);
context.restore();
requestAnimationFrame(draw);
context.save();
context.beginPath();
context.lineWidth = 3;
context.strokeStyle="black";
context.scale(0.25,0.25);
context.rect(0,0,canvas.width,canvas.height);
context.fillStyle="white";
context.fillRect(0,0,canvas.width,canvas.height);
context.stroke();
context.clip();
context.translate(canvas.width / 2, canvas.height / 2);
object.draw(context);
context.closePath();
context.restore();
下面的代碼顯示了平移代碼。
function OnMouseMove(event) {
var mousePosition = new Vector(event.clientX, event.clientY);
if(leftMouseButton) {
context.translate(mousePosition.getX() - previousMousePosition.getX(), mousePosition.getY() - previousMousePosition.getY());
}
previousMousePosition = mousePosition;
}
如何使其停止平移小地圖,而僅將平移功能應用於實際的畫布及其上的任何繪圖?
ctx.setTransform(1,0,0,1,0,0);
) 精確轉換為其自己的變量,即。 x / y,並將其與translate一起使用。
將canvas設置為其自己的CSS背景:
canvas.style.background = "url(" + canvas.toDataURL() + ")";
清除並繪制每個更新的項目,而無需擔心小地圖(如果需要更改,只需重復兩個第一步)。
ctx.translate(-x, -y);
首先翻譯x / y的畫布負片 (這將導致位置(0,0)。 這實際上需要手動翻譯每個項目,因此需要更多代碼。 由於可以使用筆譯,因此我不建議您使用此筆錄,但出於完整性考慮,在此將其包括在內。
可以將其與#2結合使用,但也很有可能是使用最多內存的技術。 出於這個原因,我們不建議這樣做,但這當然取決於畫布的總大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.