Javascript - Tutorial
Måla och animera i canvas med JS
På den här sidan kommer vi gå igenom hur man målar enkla geometriska figurer i canvaselementet med hjälp av javascript. Sedan kommer vi skapa sammansatta figurer med hjälp av objekt. Slutligen kommer vi gå igenom hur man flyttar figurerna över canvasen.
Vad din html-fil bör innehålla:
Om du använder den här html-koden så kan du skriva din kod i en annan fil som du sparar som paintoncanvas.js i samma map som html-filen. Du kan även skriva kod direkt i exemplen nedan.
Hämta canvas-referensen och måla en kvadrat
För att måla i canvaselementet med JS kan man anropa metoden getContext('2d'). Den returnerar ett js-object (canvasreferensen) som bland annat låter användaren måla olika geometriska figurer. Det här kodexemplet visar hur man använder canvasreferensen för att måla en kvadrat i en canvas.
Det går ändra i koden nere till vänster.
Testa att avkommentera (= ta bort snedsträcken före koden) de två sista raderna i exemplet. Det går att göra flera rektanglar på samma canvas.
Kolla på koden och fundera på om du kan göra tre rektanglar: en gul, en röd och en orange?
Kod:
Resultat:
Observera att det här kodexemplet förutsätter att det finns ett canvaselement med id: 'rectcanvas' i html-filen.
Det är en bra idé att göra den här biten i vs code så att man ser att den funkar. Testa att byta värden på xstart, ystart, xsize och ysize och kolla vad som händer. Testa även att byta färg (det går bra att använda hexkoder också).
Försök bygga den här snubben:
Måla cirklar, cirkelsektioner och linjer
Det finns flera metoder för att rita linjer och kurvor i canvasreferensen. De metoder som vi kommer använda för att dra linjer i det här exemplet är moveTo, lineTo och arc. För att rita linjer och fylla i figurer kommer vi använda stroke och fill.
Kod:
Resultat:
Det är en del nya grejer i det här exemplet så vi får bryta ner det. beginPath låter användaren starta en ny linje/kurva. MoveTo sätter ut en punkt som man ritar från. lineTo drar en linje från punkten man befinner sig i till den punkten som anges i lineTo:s argument. Det är alltså en lämplig metod för att måla figurer med raka linjer.
Metoden stroke används för att måla upp linjerna till figuren medan fill används för att fylla i figuren med färg.
Testa att bygga något sånt här:
Gruppera figurer med hjälp av objekt
När man vill måla upp en figur flera gånger - t.ex när man animerar eller gör spel - så är det smidigt att gruppera figurer med objekt. Detta gör att man t.ex kan ange ett x-, och y-värde till objektet för att måla upp en figur på de koordinaterna. Såhär kan det se ut:
Kod:
Resultat:
I koden skapas objektet 'dude' en gång och sedan anropas dess metod 'draw' 5 gånger.
Man kan ge objekt massa olika egenskaper för att måla på olika sätt som t.ex hastighet i x- och y-led, rotationsvinkel på armar och ben, färg och mycket mer. Testa gärna att lägga till en egenskap 'color' för att ändra färg på gubbarna.
Ge objektet i exemplet ett värde för gender för att måla ut figurerna i bilden. En if-sats i draw-metoden är ett tips:p
Uppdatera bilder med hjälp av requestAnimationFrame
I det här exemplet ska vi få en boll att studsa upp och ned. För att uppnå detta skapar vi ett litet objekt: boll. Objektet kommer som i tidigare exempel ha en draw-metod. Vi kommer loopa den metoden samtidigt som vi uppdaterar bollens position för att få det att se ut som att bollen rör sig över canvasen.
Kod:
Resultat:
Objektet boll har två metoder: move och draw. move uppdaterar bollens position och draw målar bollen på canvasen. Det intressanta i det här exemplet är dock requestAnimationFrame och clearRect.
requestAnimationFrame tar en funktion - i det här fallet animate - som argument och kör funktionens innehåll 60 gånger per sekund. Den har ungefär samma användning som setIntervall men visar inte nästa frame förrän all kod är körd.
clearRect suddar ut en yta ur canvasen. Testa gärna att kommentera bort raden med clearRect för att se varför detta är nödvändigt.
Kombinera vad du har lärt dig:p