Javascript 如何在复杂对象上绘制
我有一个相当复杂的人物画在画布上。(~1000个多边形)。所有油漆的重新喷漆时间约为1秒(非常慢)。现在,我需要让用户在该图形上移动,并从鼠标位置下方显示垂直和水平线(十字线)。什么是最好的技术,只画这两条线,而不去所有的多边形,并重新绘制每一个鼠标移动的一切Javascript 如何在复杂对象上绘制,javascript,html5-canvas,Javascript,Html5 Canvas,我有一个相当复杂的人物画在画布上。(~1000个多边形)。所有油漆的重新喷漆时间约为1秒(非常慢)。现在,我需要让用户在该图形上移动,并从鼠标位置下方显示垂直和水平线(十字线)。什么是最好的技术,只画这两条线,而不去所有的多边形,并重新绘制每一个鼠标移动的一切 Thx这个答案是错误的。 您希望在不接触基础绘画的情况下绘制线并移动它们。 在过去的好日子里,使用的方法是在图纸顶部绘制xor合成图,并在同一位置以相同的方式绘制相同的图案(这里是线),以将其从屏幕上移除,同样不接触真实的绘画 我试着用下
Thx这个答案是错误的。 您希望在不接触基础绘画的情况下绘制线并移动它们。 在过去的好日子里,使用的方法是在图纸顶部绘制xor合成图,并在同一位置以相同的方式绘制相同的图案(这里是线),以将其从屏幕上移除,同样不接触真实的绘画 我试着用下面的代码来测试这个方法,但它似乎不起作用。希望有人对canvas和js有更好的了解,能够站出来解决问题
function onmousemove(e){
// firt run
var tcanvas = document.getElementById("testCanvas");
var tcontext = tcanvas.getContext("2d");
var pos = {x : e.clientX, y : e.clientY,
w : tcanvas.width, h : tcanvas.height };
var comp = tcontext.globalCompositeOperation;
var paintline = function (p){
tcontext.save();
tcontext.lineWidth = 1;
tcontext.globalCompositeOperation = 'xor';
tcontext.fillStyle = "#000000";
tcontext.moveTo(0,p.y);
tcontext.lineTo(p.w,p.y);
tcontext.moveTo(p.x,0);
tcontext.lineTo(p.x,p.h);
tcontext.stroke();
tcontext.restore();
};
tcontext.save();
paintline(pos);
tcontext.restore();
var next = function(e){
var comp = tcontext.globalCompositeOperation;
paintline(pos);
pos = {x : e.clientX, y : e.clientY,
w : tcanvas.width, h : tcanvas.height };
paintline(pos);
};
document.onmousemove = next;
}
(function draw_stuff(){
// setup canvas
var tcanvas = document.getElementById("testCanvas");
var tcontext = tcanvas.getContext("2d");
// draw square
tcontext.fillStyle = "#FF3366";
tcontext.fillRect(15,15,70,70);
// set composite property
tcontext.globalCompositeOperation = 'xor';
// draw text
tcontext.fillStyle="#0099FF";
tcontext.font = "35px sans-serif";
tcontext.fillText("test", 22, 25);
// draw circle
tcontext.fillStyle = "#0099FF";
tcontext.beginPath();
tcontext.arc(75,75,35,0,Math.PI*2,true);
tcontext.fill();
document.onmousemove = onmousemove;
})();
而且,根据浏览器进行合成时会出现问题。我不明白为什么在画布上放置元素会有问题。我认为在画布上放置元素不会有好结果。@Eugen您是否使用更高级别的画布库?@Eugen我过去使用过,而且很容易进行分层鼠标事件。这样你就不必一直在画布上重画所有的东西了。@bits为什么不呢?你预计会出现什么问题?我知道XOR,我使用了相同的技术。但我希望实现与WPF中相同的行为。在这里,您只需移动对象,而不使用任何XOR内容。另外,你不能对文本使用XOR技术。我对WPF一无所知。