é«çº§å¨ç»
å¨ä¸ä¸ç« ï¼æä»¬å¶ä½äºåºæ¬å¨ç»ä»¥å鿥äºè§£äºè®©ç©ä»¶ç§»å¨çæ¹æ³ãå¨è¿ä¸é¨åï¼æä»¬å°ä¼å¯¹è¿å¨ææ´æ·±çäºè§£å¹¶å¦ä¼æ·»å ä¸äºç¬¦åç©ççè¿å¨ä»¥è®©æä»¬çå¨ç»æ´å é«çº§ã
ç»å¶å°ç
æä»¬å°ä¼ç»ä¸ä¸ªå°çç¨äºå¨ç»å¦ä¹ ï¼æä»¥é¦å å¨ç»å¸ä¸ç»ä¸ä¸ªçãä¸é¢ç代ç å¸®å©æä»¬å»ºç«ç»å¸ã
<canvas id="canvas" width="600" height="300"></canvas>
è·å¹³å¸¸ä¸æ ·ï¼æä»¬éè¦å
ç»ä¸ä¸ª contextï¼ç»å¸åºæ¯ï¼ã为äºç»åºè¿ä¸ªçï¼æä»¬åä¼å建ä¸ä¸ªå
å«ä¸äºç¸å
³å±æ§ä»¥å draw() 彿°ç ball å¯¹è±¡ï¼æ¥å®æç»å¶ã
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var ball = {
x: 100,
y: 100,
radius: 25,
color: "blue",
draw: function () {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
ball.draw();
è¿é并没æä»ä¹ç¹å«çãå°çå®é
䏿¯ä¸ä¸ªç®åçåå½¢ï¼å¨arc() 彿°ç帮å©ä¸ç»åºã
æ·»å éç
ç°å¨æä»¬æäºä¸ä¸ªå°çï¼æ£å夿·»å ä¸äºåºæ¬å¨ç»ï¼æ£å¦æä»¬ä¸ä¸ç« æå¦çãåæ¯è¿æ ·ï¼window.requestAnimationFrame() å䏿¬¡å¸®å©æä»¬æ§å¶å¨ç»ãå°ç便§ä¾é æ·»å éçç¢éè¿è¡ç§»å¨ã卿¯ä¸å¸§éé¢ï¼æä»¬ä¾æ§ç¨clear æ¸
çæä¹å叧鿧çåå½¢ã
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var raf;
var ball = {
x: 100,
y: 100,
vx: 5,
vy: 2,
radius: 25,
color: "blue",
draw: function () {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener("mouseover", function (e) {
raf = window.requestAnimationFrame(draw);
});
canvas.addEventListener("mouseout", function (e) {
window.cancelAnimationFrame(raf);
});
ball.draw();
è¾¹ç
è¥æ²¡æä»»ä½çç¢°ææ£æµï¼æä»¬çå°çå¾å¿«å°±ä¼è¶
åºç»å¸ãæä»¬éè¦æ£æ¥å°çç x å y ä½ç½®æ¯å¦å·²ç»è¶
åºç»å¸çå°ºå¯¸ä»¥åæ¯å¦éè¦å°é度ç¢éå转ã为äºè¿ä¹åï¼æä»¬æä¸é¢çæ£æ¥ä»£ç æ·»å è¿ draw 彿°ï¼
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
é¦ä¸ªç¤ºä¾
让æä»¬ççç°ä»å®åå¾å¦ä½ã
HTML
<canvas id="canvas" style="border: 1px solid" width="600" height="300"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
let raf;
const ball = {
x: 100,
y: 100,
vx: 5,
vy: 2,
radius: 25,
color: "blue",
draw() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener("mouseover", (e) => {
raf = window.requestAnimationFrame(draw);
});
canvas.addEventListener("mouseout", (e) => {
window.cancelAnimationFrame(raf);
});
ball.draw();
ç»æ
ç§»å¨ä½ çé¼ æ å°ç»å¸éå¼å¯å¨ç»ã
å é度
为äºè®©å¨ä½æ´çå®ï¼ä½ å¯ä»¥åè¿æ ·å¤çé度ï¼ä¾å¦ï¼
ball.vy *= 0.99;
ball.vy += 0.25;
è¿ä¼é帧åå°åç´æ¹åçéåº¦ï¼æä»¥å°çæç»å°åªä¼å¨å°æ¿ä¸å¼¹è·³ã
第äºä¸ªç¤ºä¾
HTML
<canvas id="canvas" style="border: 1px solid" width="600" height="300"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
let raf;
const ball = {
x: 100,
y: 100,
vx: 5,
vy: 2,
radius: 25,
color: "blue",
draw() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
ball.vy *= 0.99;
ball.vy += 0.25;
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener("mouseover", (e) => {
raf = window.requestAnimationFrame(draw);
});
canvas.addEventListener("mouseout", (e) => {
window.cancelAnimationFrame(raf);
});
ball.draw();
ç»æ
é¿å°¾ææ
ç°å¨ï¼æä»¬ä½¿ç¨çæ¯ clearRect 彿°å¸®æä»¬æ¸
é¤åä¸å¸§å¨ç»ãè¥ç¨ä¸ä¸ªåéæç fillRect 彿°å代ä¹ï¼å°±å¯è½»æ¾å¶ä½é¿å°¾ææã
ctx.fillStyle = "rgba(255,255,255,0.3)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
第ä¸ä¸ªç¤ºä¾
HTML
<canvas id="canvas" style="border: 1px solid" width="600" height="300"></canvas>
JavaScript
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
let raf;
const ball = {
x: 100,
y: 100,
vx: 5,
vy: 2,
radius: 25,
color: "blue",
draw() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
function draw() {
ctx.fillStyle = "rgba(255, 255, 255, 0.3)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
ball.vy *= 0.99;
ball.vy += 0.25;
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener("mouseover", (e) => {
raf = window.requestAnimationFrame(draw);
});
canvas.addEventListener("mouseout", (e) => {
window.cancelAnimationFrame(raf);
});
ball.draw();
ç»æ
æ·»å é¼ æ æ§å¶
ä¸ºäºæ´å¥½å°æ§å¶å°çï¼æä»¬å¯ä»¥ç¨ mousemoveäºä»¶è®©å®è·éé¼ æ æ´»å¨ãä¸é¢ä¾åä¸ï¼click äºä»¶ä¼éæ¾å°çç¶å让å®éæ°è·³èµ·ã
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var raf;
var running = false;
var ball = {
x: 100,
y: 100,
vx: 5,
vy: 1,
radius: 25,
color: "blue",
draw: function () {
ctx.beginPath();
ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
ctx.closePath();
ctx.fillStyle = this.color;
ctx.fill();
},
};
function clear() {
ctx.fillStyle = "rgba(255,255,255,0.3)";
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
function draw() {
clear();
ball.draw();
ball.x += ball.vx;
ball.y += ball.vy;
if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
ball.vy = -ball.vy;
}
if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
ball.vx = -ball.vx;
}
raf = window.requestAnimationFrame(draw);
}
canvas.addEventListener("mousemove", function (e) {
if (!running) {
clear();
ball.x = e.offsetX;
ball.y = e.offsetY;
ball.draw();
}
});
canvas.addEventListener("click", function (e) {
if (!running) {
raf = window.requestAnimationFrame(draw);
running = true;
}
});
canvas.addEventListener("mouseout", function (e) {
window.cancelAnimationFrame(raf);
running = false;
});
ball.draw();
ç¨ä½ çé¼ æ ç§»å¨å°çï¼ç¹å»å¯ä»¥éæ¾ã
Breakout
æ¬çæä» ä» è§£éäºä¸å°é¨åçå建é«çº§å¨ç»çæå·§ãå ¶å®è¿ææ´å¤ï¼è¯è¯æ·»å ä¸ä¸ªçæï¼ä¸äºç åï¼ç¶åå°è¿ä¸ªä¾å弿ä¸ä¸ª Breakoutï¼è¯è æ³¨ï¼æç 忏¸æï¼å¦ä½ï¼æ¥çæä»¬ç游æå¼ååºå»æ¥é æ´å¤ç¸å ³æç« ã