Helló!
Nos, mostmár ideje elkezdeni a játék megvalósítását, elsőként rajzoljuk meg a pályát és csináljuk meg az ütőt ami az egérrel mozgatható(erről fog szólni ez a post).
Hát akkor vágjunk is bele, hozzunk létre egy új üres Javascript projektet a szokásos módon és hozzunk létre egy 800×600-as canvast(ekkora lesz a pályánk) ill. néhány segédváltozót.
html(default.html):
<body> <canvas class="court" id="court" style="background-color:darkcyan"></canvas> </body>
javascript(default.js):
window.onload = initialize; function initialize() { var x, y; //segedvaltozok az eger x, y koordinatainak lekeresehez var racket = {x:350,y:250, widht:100, height:60}; // az uto var court = document.getElementById("court"); var ctx = court.getContext("2d"); court.width = 800; court.height = 600; }
Igazítsuk középre a pályánkat(default.css):
.court { width:800px; height:600px; position:absolute; left:50%; top:50%; margin:-300px 0 0 -400px; }
Ezután rajzoljuk meg a pályánkat az initialize() függvényen belül ami a következőképp fog kinézni:
function Draw() { ctx.clearRect(0, 0, court.width, court.height); ctx.beginPath(); ctx.rect(2, 2, 796, 596); ctx.rect(100, 100, 600, 400); ctx.rect(200, 200, 400, 200); ctx.moveTo(0, 0); ctx.lineTo(200, 200); ctx.moveTo(800, 0); ctx.lineTo(600, 200); ctx.moveTo(800, 600); ctx.lineTo(600, 400); ctx.moveTo(0, 600); ctx.lineTo(200, 400); ctx.strokeStyle = 'lightgrey'; ctx.lineWidth = 4; ctx.stroke(); //uto kirajzolasa ctx.beginPath(); ctx.rect(racket.x, racket.y, racket.widht, racket.height); ctx.strokeStyle = 'grey'; ctx.lineWidth = 3; ctx.stroke(); //ez lesz a labdank(a kovetkezo post-ban targyaljuk a mozgasat) ctx.beginPath(); ctx.arc(400, 300, 15, 0, 2 * Math.PI, false); ctx.strokeStyle = "white"; ctx.lineWidth = 1; ctx.stroke(); }
Az ütő mozgásához további két függvényt kell megvalósítanunk eggyikkel az egér x, y koordinátáit kérhetjük le a mássikkal pedig beállítjuk az ütő koordinátáit az egér koordinátáira, lássuk hogyan is fog ez kinézni:
// az eger koordinatainak lekerese function getMousePos(canvas, evt) { var rect = court.getBoundingClientRect(); return { x: evt.clientX - rect.left, y: evt.clientY - rect.top }; } //uto koordinatainak beallitasa court.addEventListener('mousemove', function (evt) { var mousePos = getMousePos(court, evt); racket.x = mousePos.x-50; racket.y = mousePos.y-30; }, false);
Ha mindennel megvagyunk már csak egy lépés van hátra, mégpedig a canvas ujrarajzolása, amit a setInterval(…) függvénnyel tehetünk meg. Adjuk hozzá az initialize() függvényhez a következő sort:
setInterval(function () { Draw() }, 30);
Ha kész vagyunk futtasuk a projektünket és próbáljuk ki.
A teljes projekt innen letölthető: PalyaDemo
Üdv.:
Balázs