HTML 5 <Canvas>
HTML 5 <Canvas>
这是我的代码。在使用 html 5 canvas 元素和 javascript 代码绘制山景之间的云图像时需要帮助。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<canvas id="myCanvas" style="border:2px solid black;"></canvas>
</head>
<body>
<script>
var c= document.getElementById("myCanvas");
var d=c.getContext("2d");
d.beginPath();
d.strokeStyle="red";
d.moveTo(0,50);<!-- width is 0 and height is 50-->
d.lineTo(100,0);
d.moveTo(100,0);<!-- width is 0 and height is 50-->
d.lineTo(150,50);
d.moveTo(150,50);
d.lineTo(200,0);
d.moveTo(200,0);
d.lineTo(300,50);
d.lineTo(0,50);
d.stroke();
d.beginPath();
d.arc(150,15,10,0,2*Math.PI);
d.stroke();
d.beginPath();
d.strokeStyle="black";
d.moveTo(100,100);
d.lineTo(200,100);
d.lineTo(150,60);
d.lineTo(100,100);
d.lineTo(100,150);
d.lineTo(200,150);
d.lineTo(200,100);
d.stroke();
d.moveTo(135,150);
d.lineTo(135,120);
d.lineTo(135,120);
d.lineTo(160,120);
d.lineTo(160,150);
d.stroke();
d.beginPath();
d.arc(20,20,10,.25*Math.PI,.75*Math.PI);
d.stroke();
</script>
</body>
</html>
请在我的下方添加任何合适的代码以包含云的图像
您可以使用三次贝塞尔曲线绘制云。
您还可以根据需要使用变换移动云彩并调整其大小。 translate 命令将移动绘图的起始 [x,y] 点。缩放命令将绘图放大或缩小。
另一组有用的命令是 save() 和 restore()。 context.save()
将在您更改绘图颜色或进行变换之前保存上下文状态。 context.restore()
将恢复上次 context.save 之前存在的原始上下文。否则,您需要手动撤消所有变换并重置颜色。
这是示例代码和演示:
var canvas=document.getElementById("canvas");
var d=canvas.getContext("2d");
d.fillStyle='skyblue';
d.fillRect(0,0,canvas.width,canvas.height);
cloud(50,100,0.50);
function cloud(x,y,scale){
d.save();
d.translate(x,y);
d.scale(scale,scale);
d.beginPath();
d.moveTo(0, 0);
d.bezierCurveTo(-40, 20, -40, 70, 60, 70);
d.bezierCurveTo(80, 100, 150, 100, 170, 70);
d.bezierCurveTo(250, 70, 250, 40, 220, 20);
d.bezierCurveTo(260, -40, 200, -50, 170, -30);
d.bezierCurveTo(150, -75, 80, -60, 80, -30);
d.bezierCurveTo(30, -75, -20, -60, 0, 0);
d.strokeStyle='lightgray';
d.fillStyle='white';
d.fill();
d.stroke();
d.restore();
}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>
@markE 抱歉,我的信息不清楚。
我 100% 同意你的看法。我赞成您的回答,因为这绝对是正确且最灵活的方法!我以为 OP 会喜欢你的回答。
我很惊讶地看到,在你的详尽解释之后,@newbie 说“..它没有回答我原来的问题,即需要用 arc 创建云......”。
我只是想回答他,但试图指出使用 arc() 是不灵活的,不推荐使用。
抱歉造成误解。
我应该重写我的回复:"Ditto what @markE said" :)
这是我的代码。在使用 html 5 canvas 元素和 javascript 代码绘制山景之间的云图像时需要帮助。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<canvas id="myCanvas" style="border:2px solid black;"></canvas>
</head>
<body>
<script>
var c= document.getElementById("myCanvas");
var d=c.getContext("2d");
d.beginPath();
d.strokeStyle="red";
d.moveTo(0,50);<!-- width is 0 and height is 50-->
d.lineTo(100,0);
d.moveTo(100,0);<!-- width is 0 and height is 50-->
d.lineTo(150,50);
d.moveTo(150,50);
d.lineTo(200,0);
d.moveTo(200,0);
d.lineTo(300,50);
d.lineTo(0,50);
d.stroke();
d.beginPath();
d.arc(150,15,10,0,2*Math.PI);
d.stroke();
d.beginPath();
d.strokeStyle="black";
d.moveTo(100,100);
d.lineTo(200,100);
d.lineTo(150,60);
d.lineTo(100,100);
d.lineTo(100,150);
d.lineTo(200,150);
d.lineTo(200,100);
d.stroke();
d.moveTo(135,150);
d.lineTo(135,120);
d.lineTo(135,120);
d.lineTo(160,120);
d.lineTo(160,150);
d.stroke();
d.beginPath();
d.arc(20,20,10,.25*Math.PI,.75*Math.PI);
d.stroke();
</script>
</body>
</html>
请在我的下方添加任何合适的代码以包含云的图像
您可以使用三次贝塞尔曲线绘制云。
您还可以根据需要使用变换移动云彩并调整其大小。 translate 命令将移动绘图的起始 [x,y] 点。缩放命令将绘图放大或缩小。
另一组有用的命令是 save() 和 restore()。 context.save()
将在您更改绘图颜色或进行变换之前保存上下文状态。 context.restore()
将恢复上次 context.save 之前存在的原始上下文。否则,您需要手动撤消所有变换并重置颜色。
这是示例代码和演示:
var canvas=document.getElementById("canvas");
var d=canvas.getContext("2d");
d.fillStyle='skyblue';
d.fillRect(0,0,canvas.width,canvas.height);
cloud(50,100,0.50);
function cloud(x,y,scale){
d.save();
d.translate(x,y);
d.scale(scale,scale);
d.beginPath();
d.moveTo(0, 0);
d.bezierCurveTo(-40, 20, -40, 70, 60, 70);
d.bezierCurveTo(80, 100, 150, 100, 170, 70);
d.bezierCurveTo(250, 70, 250, 40, 220, 20);
d.bezierCurveTo(260, -40, 200, -50, 170, -30);
d.bezierCurveTo(150, -75, 80, -60, 80, -30);
d.bezierCurveTo(30, -75, -20, -60, 0, 0);
d.strokeStyle='lightgray';
d.fillStyle='white';
d.fill();
d.stroke();
d.restore();
}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>
@markE 抱歉,我的信息不清楚。
我 100% 同意你的看法。我赞成您的回答,因为这绝对是正确且最灵活的方法!我以为 OP 会喜欢你的回答。
我很惊讶地看到,在你的详尽解释之后,@newbie 说“..它没有回答我原来的问题,即需要用 arc 创建云......”。 我只是想回答他,但试图指出使用 arc() 是不灵活的,不推荐使用。
抱歉造成误解。
我应该重写我的回复:"Ditto what @markE said" :)