Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 画布人物移动到右侧_Javascript_Canvas - Fatal编程技术网

Javascript 画布人物移动到右侧

Javascript 画布人物移动到右侧,javascript,canvas,Javascript,Canvas,代码如下: $(文档).ready(函数(){ var canvas=$(“#canvas”)[0]; var context=canvas.getContext(“2d”); canvas.width=window.innerWidth canvas.height=window.innerHeight 多边形(上下文,120,120,50,12); stroke(); }) 函数多边形(ctx、x、y、半径、边){ 如果(侧面

代码如下:

$(文档).ready(函数(){
var canvas=$(“#canvas”)[0];
var context=canvas.getContext(“2d”);
canvas.width=window.innerWidth
canvas.height=window.innerHeight
多边形(上下文,120,120,50,12);
stroke();
})
函数多边形(ctx、x、y、半径、边){
如果(侧面<3)返回;
变量a=((数学PI*2)/边;
ctx.beginPath();
ctx.translate(x,y);
ctx.moveTo(半径,0);
对于(变量i=1;i


哎呀。。升级浏览器
绘制完所需形状后,将其恢复到原始位置,以便从与第一个形状相同的相对位置绘制下一个形状

ctx.translate(-x, -y);
$(文档).ready(函数(){
var canvas=$(“#canvas”)[0];
var context=canvas.getContext(“2d”);
canvas.width=window.innerWidth
canvas.height=window.innerHeight
多边形(上下文,120,120,50,12);
stroke();
多边形(上下文,120220,50,12);
stroke();
})
函数多边形(ctx、x、y、半径、边){
如果(侧面<3)返回;
变量a=((数学PI*2)/边;
ctx.beginPath();
ctx.translate(x,y);
ctx.moveTo(半径,0);
对于(变量i=1;i


哎呀。。升级浏览器
在绘制每个形状之前,将转换矩阵重置为标识矩阵:

context.setTransform(1, 0, 0, 1, 0, 0);

您对多边形反复使用相同的二维上下文。上下文将保存翻译的状态,因此连续的翻译相加。通过在每个
多边形
调用的末尾使用相同的负值进行翻译,可以“还原”翻译的效果

$(文档).ready(函数(){
var canvas=$(“#canvas”)[0];
var context=canvas.getContext(“2d”);
canvas.width=window.innerWidth
canvas.height=window.innerHeight
多边形(上下文,120,120,50,12);
stroke();
多边形(上下文,120、220、50、12);
stroke();
})
函数多边形(ctx、x、y、半径、边){
如果(侧面<3)返回;
变量a=((数学PI*2)/边;
ctx.beginPath();
ctx.translate(x,y);
ctx.moveTo(半径,0);
对于(变量i=1;i


哎呀。。升级您的浏览器
我认为这是因为:

ctx.translate(x, y);
如果仔细观察定义和用法,您会发现translate()方法会重新映射画布的(0,0)位置,而不是设置绘图的起点。因此,如果您执行如下函数调用:

ctx.translate(120, 120);
ctx.translate(120, 220);
您实际上移动了画布的注册点两次。第一次将移动(120120),之后将移动(120220),因此第一个多边形将正确绘制,但第二个多边形将在位置(240340)上绘制,因为两个起点的坐标最终将求和