解释一下 for (var i = 0; i < 150; i++) { ct.beginPath() ct.strokeStyle = 'white'; ct.arc(getRandom(-rx,rx),getRandom(-ry,ry),1,0, getRandom(90,360) ,false); ct.stroke(); }
时间: 2024-04-23 13:22:46 浏览: 130
这段代码的作用是在 Canvas 上绘制一些白色的小点,模拟出星空的效果。
首先使用 for 循环语句循环 150 次,每次循环都执行一遍循环体中的代码。
在循环体中,首先使用 beginPath() 方法开始绘制新的路径,然后将绘图的线条颜色设置为白色,即 ct.strokeStyle = 'white';。
接着使用 arc() 方法绘制了一个半径为 1 像素的圆形,圆心位置是随机的,使用了 getRandom() 函数生成了随机坐标。其中,getRandom(-rx,rx) 和 getRandom(-ry,ry) 分别表示 x 轴和 y 轴上的随机坐标,rx 和 ry 分别表示 Canvas 的宽度和高度的一半,用于限定随机坐标的范围。
在绘制圆形时,起始角度为 0 度,终止角度是一个随机值,使用 getRandom(90, 360) 函数生成。最后一个参数为 false 表示顺时针方向绘制。
最后,使用 stroke() 方法绘制路径,即将圆形绘制到 Canvas 上,形成一个个白色的小点。这样就模拟出了星空的效果。
因此,这段代码的作用是在 Canvas 上绘制一些白色的小点,形成星空的效果。
相关问题
解释下面代码 addBubble: function (bubble) { var thisBubble = this.getBubble(bubble.x, bubble.y); thisBubble.color = bubble.color; }, setBubble: function (x, y, color) { this.getBubble(x, y).color = color; }, getBubble: function (x, y) { if (x < 0 || y < 0 || x > game.cellCount || y > game.cellCount) return null; return this.bubbles[y][x]; }, isEmpty: function (x, y) { var bubble = this.getBubble(x, y); return !bubble.color; }, }; var Cell = function (x, y) { this.x = x; this.y = y; } var Bubble = function (x, y, color) { this.x = x; this.y = y; this.px = game.cellWidth * (this.x + 1) - game.cellWidth / 2; this.py = game.cellWidth * (this.y + 1) - game.cellWidth / 2; this.color = color; this.light = 10; }; Bubble.prototype.draw = function () { if (!this.color) { return; } var ctx = game.ctx; ctx.beginPath(); //console.log("x:" + px + "y:" + py); var gradient = ctx.createRadialGradient(this.px - 5, this.py - 5, 0, this.px, this.py, this.light); gradient.addColorStop(0, "white"); gradient.addColorStop(1, this.color); ctx.arc(this.px, this.py, 11, 0, Math.PI * 2); ctx.strokeStyle = this.color; ctx.fillStyle = gradient; ctx.fill(); ctx.stroke(); }; Bubble.prototype.play = function () { var me = this; var isUp = true; game.play("light_" + this.x + "" + this.y, function () { if (isUp) { me.light += 3; } if (!isUp) { me.light -= 3; } if (me.light >= 30) { isUp = false; } if (me.light <= 10) { isUp = true; } }, 50); }; Bubble.prototype.stop = function () { //this.light = 10; var me = this; game.stop("light" + this.x + "" + this.y); game.play("restore" + this.x + "" + this.y, function () { if (me.light > 10) { me.light--; } else { me.light = 10; game.stop("restore" + me.x + "_" + me.y); } }, 50); }; game.start(); </script> <div style="text-align:center;"> </div> <script src="http://www.mycodes.net/js/tongji.js"></script> <script src="http://www.mycodes.net/js/youxia.js" type="text/javascript"></script> </body> </html>
这是一个实现五彩连珠小游戏的 JavaScript 代码。其中包括了 Bubble、Cell 和 Game 三个对象的定义和相关方法的实现。
Bubble 对象表示游戏中的一个气泡,包括了气泡的坐标、颜色、亮度等属性,以及绘制、播放和停止动画等方法。Cell 对象表示游戏中的一个单元格,包括了单元格的坐标,而 Game 对象则表示整个游戏,包括了游戏面板、气泡数组、得分、关卡等信息,以及添加气泡、绘制面板、处理点击事件等方法。
具体实现细节可以参考代码中的注释。
将下面的代码改成createjs的方法 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> </head> <body> <canvas id="canvas" width="600" height="300""></canvas><br> <button style="width:80px;background-color:yellow;" onclick='linecolor = "yellow";'>YELLOW</button> <button style="width:80px;background-color:red;" onclick='linecolor = "red";'>RED</button> <button style="width:80px;background-color:blue;" onclick='linecolor = "blue";'>BLUE</button> <button style="width:80px;background-color:green;" onclick='linecolor = "green";'>GREEN</button> <button style="width:80px;background-color:white;" onclick='linecolor = "white";'>WHITE</button> <button style="width:80px;background-color:black;color:white;" onclick='linecolor = "black";'>BLACK</button> <br> <button style="width:80px;background-color:white;" onclick="linw = 4;">4px</button> <button style="width:80px;background-color:white;" onclick="linw = 8;">8px</button> <button style="width:80px;background-color:white;" onclick="linw = 16;">16px</button> <br> <button style="width:80px;background-color:pink;" onclick="copyimage();">EXPORT</button> <br> <img src="" id="image_png" width="600" height="300"> <script type="text/javascript"> var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); //画一个黑色矩形 ctx.fillStyle="black"; ctx.fillRect(0,0,600,300); //按下标记 var onoff = false; var oldx = -10; var oldy = -10; //设置颜色 var linecolor = "white"; //设置线宽 var linw = 4; //添加鼠标移动事件 canvas.addEventListener("mousemove",draw,true); //添加鼠标按下事件 canvas.addEventListener("mousedown",down,false); //添加鼠标弹起事件 canvas.addEventListener("mouseup",up,false); function down(event){ onoff = true; oldx = event.pageX-10; oldy = event.pageY-10; } function up(){ onoff = false; } function draw(event){ if(onoff == true){ var newx = event.pageX-10; var newy = event.pageY-10; ctx.beginPath(); ctx.moveTo(oldx,oldy); ctx.lineTo(newx,newy); ctx.strokeStyle=linecolor; ctx.lineWidth=linw; ctx.lineCap="round"; ctx.stroke(); oldx = newx; oldy = newy; }; }; function copyimage(event){ var img_png_src = canvas.toDataURL("image/png"); document.getElementById("image_png").src = img_png_src; } </script> </body> </html>
以下是使用createjs库改写后的代码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.createjs.com/1.0.0/createjs.min.js"></script>
</head>
<body>
<canvas id="canvas" width="600" height="300"></canvas><br>
<button style="width:80px;background-color:yellow;" onclick='linecolor = "yellow";'>YELLOW</button>
<button style="width:80px;background-color:red;" onclick='linecolor = "red";'>RED</button>
<button style="width:80px;background-color:blue;" onclick='linecolor = "blue";'>BLUE</button>
<button style="width:80px;background-color:green;" onclick='linecolor = "green";'>GREEN</button>
<button style="width:80px;background-color:white;" onclick='linecolor = "white";'>WHITE</button>
<button style="width:80px;background-color:black;color:white;" onclick='linecolor = "black";'>BLACK</button>
<br>
<button style="width:80px;background-color:white;" onclick="linw = 4;">4px</button>
<button style="width:80px;background-color:white;" onclick="linw = 8;">8px</button>
<button style="width:80px;background-color:white;" onclick="linw = 16;">16px</button>
<br>
<button style="width:80px;background-color:pink;" onclick="copyimage();">EXPORT</button>
<br>
<img src="" id="image_png" width="600" height="300">
<script type="text/javascript">
// 获取canvas元素
var canvas = document.getElementById("canvas");
// 创建createjs的stage对象
var stage = new createjs.Stage(canvas);
// 画一个黑色矩形
var bg = new createjs.Shape();
bg.graphics.beginFill("black").drawRect(0, 0, canvas.width, canvas.height);
stage.addChild(bg);
stage.update();
// 按下标记
var onoff = false;
var oldx = -10;
var oldy = -10;
// 设置颜色
var linecolor = "white";
// 设置线宽
var linw = 4;
// 添加鼠标移动事件
canvas.addEventListener("mousemove", draw);
// 添加鼠标按下事件
canvas.addEventListener("mousedown", down);
// 添加鼠标弹起事件
canvas.addEventListener("mouseup", up);
function down(event){
onoff = true;
oldx = event.pageX - canvas.offsetLeft;
oldy = event.pageY - canvas.offsetTop;
}
function up(){
onoff = false;
}
function draw(event){
if(onoff == true){
var newx = event.pageX - canvas.offsetLeft;
var newy = event.pageY - canvas.offsetTop;
var shape = new createjs.Shape();
shape.graphics.setStrokeStyle(linw, 'round', 'round');
shape.graphics.beginStroke(linecolor);
shape.graphics.moveTo(oldx, oldy);
shape.graphics.lineTo(newx, newy);
shape.graphics.endStroke();
stage.addChild(shape);
stage.update();
oldx = newx;
oldy = newy;
}
}
function copyimage(event){
var img_png_src = canvas.toDataURL("image/png");
document.getElementById("image_png").src = img_png_src;
}
</script>
</body>
</html>
阅读全文