va învăța elementele de bază ale html Canvas API și va crea un joc de ping-pong folosind conceptele pe care le vom învăța în acest articol.
Boiler Plată pentru articol
CSS
html, * { box-sizing: border-box; margin: 0; padding: 0; } body { text-align: center; } .grid { background: lightgreen; margin: auto; } p:nth-child(1) { padding: 10px 20px; text-align: center; font-family: ubuntu; font-weight: bolder; font-size: 25px; text-transform: uppercase; color: gray; }
HTML
<canvas class='grid' width="1000" height="500"> </canvas>
JAVASCRIPT
let ctx = document.querySelector("canvas").getContext("2d");
Notă: în acest articol vom manipula numai fișierul script java.
Elementele de bază ale API-ului HTML Canvas
1. Crearea liniei
function createLine(x1, y1, x2, y2) { ctx.lineWidth = 5; ctx.strokeStyle = "red"; ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke(); ctx.closePath(); } createLine(0, 0, 10, 10);
lineWidth: acest parametru dă grosimea liniei.
strokeStyle:Acest parametru dă culoare personalizată liniei.
moveTo(): Când vrem să ne mutăm într-un punct fără a trasa o linie pe pânză, folosim comanda mutare.
lineTo(): Când dorim să trasăm o linie de la poziția curentă la poziția dorită, atunci folosim această funcție.
stroke():Când folosim lineTo() linia de comandă nu va fi desenată pe vizibil până și dacă nu folosim comanda stroke() în final.
2. Crearea dreptunghiului
function createRect(x1, y1, width, height) { ctx.fillStyle = "red"; ctx.fillRect(x1, y1, width, height); } createLine(0, 0, 10, 10);
fillStyle:este folosit pentru a da culoare personalizată dreptunghiului care urmează să fie creat.
fillRect():Această comandă este folosită pentru a crea un dreptunghi.
3. Crearea unui cerc
function createCircle(cx, cy, radius) { ctx.fillStyle = "red"; ctx.beginPath(); ctx.arc(cx, cy, radius, 0, 2 * Math.PI); ctx.stroke(); ctx.fill(); ctx.closePath(); } createCircle(20, 20, 10);
arc():Comanda Arc este utilizată pentru a crea un arc care ia ca parametru coordonata centru x, coordonata centru y, raza, unghi inițial și unghi final.
🕙 Să creăm Jocul PING-PONG 🕟
let circle = { x: 100, y: 100, radius: 10, dx: 2, dy: 2 } let rect = { x: 488, y: 0, width: 10, height: 50, } let line = { init_x: 100, init_y: 100, fin_x: 0, fin_y: 0 } let ctx = document.querySelector("canvas").getContext("2d"); function draw_circle() { ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height) ctx.beginPath(); ctx.arc(circle.x , circle.y, circle.radius, 0, Math.PI * 2); ctx.fillStyle = 'red'; ctx.fill(); ctx.fillStyle = 'blue'; ctx.fillRect(rect.x,rect.y,rect.width,rect.height); } function draw_animated_circle() { draw_circle(circle); circle.x += circle.dx; circle.y += circle.dy; line.init_x = line.fin_x line.init_y = line.fin_y line.fin_x = circle.x; line.fin_y = circle.y; if(circle.x + circle.radius ==rect.x && ( circle.y + circle.radius >rect.y && circle.y + circle.radius <rect.y + rect.height + 2 * circle.radius) ) { circle.dx *= -1; } if(circle.x + circle.radius >= ctx.canvas.width || circle.x <= circle.radius ) { if(circle.x + circle.radius >= ctx.canvas.width){ alert("gameover"); window.location.reload(); } circle.dx *= -1; } if(circle.y + circle.radius >= ctx.canvas.height || circle.y <= circle.radius ) { circle.dy *= -1; } requestAnimationFrame(draw_animated_circle); } function init() { document.querySelector("body").addEventListener("keydown", (e) => { if(e.keyCode == 38 &&rect.y >= 2) { rect.y -= 10 } if(e.keyCode == 40 && rect.y +rect.height < ctx.canvas.height - 7 ) { rect.y += 10 } }) draw_animated_circle(); } init();
requestAnimationFrame : metoda îi spune browserului că doriți să efectuați o animație și solicită browserului să apeleze o funcție specificată pentru a actualiza o animație înainte de următoarea vopsire. Metoda ia un callback ca argument pentru a fi invocat înainte de revopsire.
„CodePen” Link către jocul de ping pong pe care l-am creat.
Notă: doar folosind aceste concepte de bază, puteți crea multe animații frumoase și multe altele.
Pentru a afla mai multe despre pânză, puteți consulta documentația MDN.