请考虑以下示例。
var ctx = document.createElement('canvas').getContext('2d');
function draw(){
ctx.fillRect(10,10,10,10);
};
function render(){
var coordinates = {x:100,y:200};
draw();
};
问题
这样就足以在画布的顶部和左侧绘制一个10个像素的黑色矩形。但是,我如何指示程序将函数draw
中绘制的所有内容移动到coordinates
中的值?
我目前的想法以及他们为什么不工作
draw
函数中的所有内容,然后使用drawImage
将该画布绘制到具有所需翻译的所需画布上。示例:draImage(canvas,coordinates.x,coordinates.y);
。这失败是因为draw
函数是在与ctx
相同的范围内创建的,即使在ctx
中重新定义了render
,它仍然会使用原始ctx
进行绘制}。答案 0 :(得分:1)
尝试多次保存/恢复的原始想法。
使用每个context.save()将Canvas状态推送到堆栈上,并使用每个context.restore()弹出。
因此你应该没有问题"嵌套"保存/恢复' S
答案 1 :(得分:0)
您可以在函数范围之外创建一个变量
var coordinates;
var ctx = document.createElement('canvas').getContext('2d');
function draw(){
//use the values
ctx.fillRect(coordinates.x,coordinates.y,10,10);
};
function render(){
//set the values
coordinates = {x:100,y:200};
draw();
};