2D-animointi verkkosivuilla (HTML5 Canvas)

Samankaltaiset tiedostot
(HTML5 Canvas) T Digitaalisen median työvälineet (3 op) ME-C2300 Verkkojulkaisemisen perusteet (5 op)

(HTML5 Canvas) T Digitaalisen median työvälineet (3 op) ME-C2300 Verkkojulkaisemisen perusteet (5 op)

T Digitaalisen median työvälineet (3 op) ME-C2300 Verkkojulkaisemisen perusteet (5 op) Mediatekniikan laitos / Informaatioverkostot

Krista Laiho. HTML5 Canvas. Canvasin soveltuminen banneriin. Metropolia Ammattikorkeakoulu. Medianomi. Viestinnän koulutusohjelma.

Harjoitustyö 5: 2D-animointi verkkosivuilla (HTML5 Canvas)

HTML5 video, audio, canvas. Mirja Jaakkola

Projektityö ja pelikehitys

Kurssijärjestelyt. CS-1180 Verkkojulkaisemisen perusteet (5 op) Hanna Hämäläinen Informaatioverkostot / Mediatekniikan laitos

Kurssijärjestelyt. ME-C2300 Verkkojulkaisemisen perusteet (5 op) Mari Hirvi Informaatioverkostot / Mediatekniikan laitos

HTML 5 Johdanto. Mikä on HTML 5

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

WWW-sivujen Verkkosivujen ulkoasu (CSS)

Alkuun HTML5 peliohjelmoinnissa

Projektityö ja pelikehitys

Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

OHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE

GRAAFISEN SUUNNITELUTYÖKALUN TOTEUTUS

Digitaalisen median tekniikat. Luento 4: JavaScript

(JavaScript) Aleksi O Connor DI Informaatioverkostot. Markku Laine Mediatekniikan laitos

Harjoitus 4: HTML5 piirtoalusta ( )!

Verkkosivujen toiminnallisuus (JavaScript)

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Laajuus 5 op Luennot: 12 x 2t Harjoitukset: 7 viikkoharjoitusta harjoitusten tekemiseen saatavissa apua 2 ryhmää / harjoitus

QT tyylit. Juha Järvensivu 2008

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

Digitaalisen median tekniikat. Luento 3: CSS

WWW-Sivustojen suunnittelu. Miten WWW toimii. Suunnittelun lähtökohdat

WWW-Sivustojen suunnittelu

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

(JavaScript) T Digitaalisen median työvälineet (3 op) ME-C2300 Verkkojulkaisemisen perusteet (5 op)

Racket ohjelmointia II. Tiina Partanen 2015

Sovelmat. Janne Käki

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen

Lisätehtävät. Frantic 2015 sivu 1

WWW-sivujen Verkkosivujen ulkoasu (CSS)

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

HTML5 -elementit jatkuu

Internet-pohjaisen oppimisympäristön laadinta. Luento 3

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

CSS-kielen avulla määritellään HTML-dokumentin tyyli. CSS avulla voidaan tarkemmin määritellä eri elementtien ominaisuuksia.

TEEMA 2 TAULUKKODATAN KÄSITTELY JA TIEDON VISUALISOINTI LUENTO 4

Flash. Tehtävä 1 Piirtotyökalut, kokeile niitä. Liiketalous syksy 2012

7 tapaa mallintaa maasto korkeuskäyristä ja metodien yhdistäminen

2. PEHMEÄ XHTML XRAJAHTML

Harjoitus Bones ja Skin

Harjoitus 2: Raahaus, satunnaisuus ja taulukot ( )!

Johdatus tutkimustyöhön. Harjoitus 9: Kenraaliharjoitus (Tiistain harkkaryhmä)

Tehtävä 3 ja aikakausilehden kansi pastissi 4. runokirjan kansi

Selainpelien pelimoottorit

Tasogeometriaa GeoGebran piirtoalue ja työvälineet

JAVA-OHJELMOINTI 3 op A274615

Java ja grafiikka. Ville Sundberg

Luento 11: XSL-FO & SVG

Johdatusta selainohjelmointiin

Copyright Observis Oy All rights reserved. Observis Oy Ville Kanerva, CTO Heikki Isotalus, COO Datasta tietoa

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

W3C ja Web-teknologiat

Kuvat. 1. Selaimien tunnistamat kuvatyypit

Kotisivujen teko. Jan Lindholm Kirkkonummen kansalaisopisto Syksy koodari.eu jsbin.com

Selaimen asetukset. Toukokuu (7) Selaimen asetukset Tikon Oy. All rights reserved.

Adobe Photoshop Elements, kuvakäsittelyn perusteet

Digitaalisen median tekniikat Luento 1: Intro

Näkymä: Työkalupalkki (Tool bar):

Harjoitus 2: Oppijan aktivointi ( )

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Videoeditointi: Adobe Premiere Pro CS4

POP-UP -IKKUNOIDEN SALLIMINEN

Ohjelmoinnin perusteet Y Python

Laiteriippumaton UI Ajaxilla ja Javalla

Digitaalisen arkkitehtuurin alkeet

Kuva xhtml-sivulla. Mirja Jaakkola

Tavallisen videomainoksen sijasta Ruudussa voidaan mainostauolla esittää dynaamisia spotteja.

ipad-mainokset Yleisiä ohjeita ja tekniikka lyhyesti

Posterin teko MS Publisherilla

INTERNETSELAIMEN ASETUKSET. Kuinka saan parhaan irti selaimesta

Graafisen käyttöliittymän ohjelmointi Syksy 2013

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

Gimp JA MUUT KUVANKÄSITTELYOHJELMAT

HTML5 Tutkielma Centria ammattikorkeakoulu Paavo Räisänen

Racket ohjelmointia osa 1. Tiina Partanen Lielahden koulu 2014

Jypelin käyttöohjeet» Ruutukentän luominen

Tikon Web-sovellukset

Sivuston nopeus. (vanhentumista ei ole määritetty)

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Cascading Style Sheets

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Sisältö. XML, XHTML ja CSS XML XML. XML:n ja HTML:n ero. XML kieliä XML XHTML CSS XSL. T Hypermediadokumentin laatiminen 2002

Ulkoasun muokkaus CSS-tiedostossa

PÄIVITÄ TIETOSI OPTIMASTA! KOOSTE

Tikon Web-sovellukset

Skaalautuva vektorigrafiikka mobiiliselaimissa. Mihkel Lind

TAULUKOINTI. Word Taulukot

CSS - tyylit Seppo Räsänen

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

Transkriptio:

2D-animointi verkkosivuilla Selainohjelmointi (JavaScript) (HTML5 Canvas) T-111.1100 Digitaalisen median työvälineet (3 op) CS-C1180 Verkkojulkaisemisen perusteet (5 op) Ville Kumpulainen DI Markku Laine Informaatioverkostot Mediatekniikan laitos / Mediatekniikan laitos 28. lokakuuta 2014

Demo: HTML5 Pacman http://arandomurl.com/2010/07/25/html5-pacman.html

Luennon jälkeen osaan toteuttaa yksinkertaisia 2D-animaatioita verkkosivuille HTML5 Canvas:n avulla.

Luennon sisältö Kertausta Animointiteknologiat verkossa HTML5 Canvas HTML Canvas 2D Context Animointi Yhteenveto ja tehtävänanto

Kertausta

Javascriptin liittäminen HTML-sivuille 1) Sisäinen <script> elementti 2) Ulkoinen *.js tiedosto

Tapahtumat DOM Level 3 Events W3C:n työluonnos, syyskuu 2014 Määrittelee tapahtumat, niiden kuuntelun ja etenemisen, jne. http://www.w3.org/tr/dom-level-3-events/ Yleisimmät tapahtumatyypit Käyttöliittymätapahtumat, esim. load Kohdistustapahtumat, esim. focus Hiiritapahtumat, esim. click, mouseover ja mousemove Näppäimistötapahtumat, esim. keyup ja keydown Lista tapahtumatyypeistä http://www.w3.org/tr/dom-level-3-events/#event-types-list

Tapahtumarajapinnat ja niiden perintä

Tapahtumarajapinnat - esimerkki Hiiripainallusten kuuntelu function addeventlisteners() { canvas.addeventlistener( "mousedown", function( e ) { var x = e.offsetx; var y = e.offsety; var enemy = null; for ( var i = 0; i < enemies.length; i++ ) { enemy = enemies[ i ]; if ( enemy.alive === true ) { if ( enemy.x <= x && x <= ( enemy.x + enemy.image.width ) && enemy.y <= y && y <= ( enemy.y + enemy.image.height ) ) { enemy.alive = false; console.log( "Hit" ); } } } }); }

Olio-ohjelmointi JavaScriptillä JavaScript on oliopohjainen kieli JavaScript ei kuitenkaan tarjoa Javan kaltaista tukea olio-ohjelmoinnille Ei suoranaisesti tue luokkia, perintää, jne. Voidaan simuloida funktioiden ja prototyyppien avulla luokat, rakentajat, muuttujat, vakiot, metodit, Luokkien määrittelyyn useita eri tapoja http://www.phpied.com/3-ways-to-define-a-javascript-class/ Tarjolla myös erillisiä kirjastoja

Olio-ohjelmointi JavaScriptillä

Olio-ohjelmointi JavaScriptillä

Olio-ohjelmointi JavaScriptillä

jquery jquery on JavaScript-kirjasto, joka helpottaa ja nopeuttaa yleisimpien JavaScript-toimintojen toteutusta asiakaspäässä Yksinkertainen ja tiivis syntaksi Tukee yleisimmin käytettäviä toimintoja Ottaa huomioon selainten väliset eroavaisuudet Laajennettavissa liitännäiskoodin avulla

Debuggaus Firebug Liitännäinen Firefoxiin sekä JavaScript-pohjainen Lite versio kaikkiin selaimiin http://getfirebug.com/ Web Developer Tools Sisäänrakennettu työkalu Firefoxiin Developer Tools Sisäänrakennettu työkalu Safariin ja Chromeen console.log(... ) metodi Tulostaa viestit konsolille Huomattavasti parempi vaihtoehto kuin vanha alert(... ) metodin käyttäminen avaa ponnahdusikkunan

Testaus JSHint Validointipalvelu JavaScriptin/JSONin syntaksille http://www.jshint.com/ BrowserStack Maksullinen testauspalvelu web-sovellusten alustariippumattomuuteen, vuorovaikutteinen http://www.browserstack.com/ Browsershots Ilmainen testauspalvelu web-sovellusten alustariippumattomuuteen, vain kuvakaappauksia http://browsershots.org/

Animointi-tekn ologiat verkossa

CSS Animations W3C:n työluonnos yksinkertaisille animaatioille, esim. efektit 2D- ja 3D-pikseligrafiikkaa CSS:llä Pystyy hyödyntämään tietokoneen GPU:ta Saatavilla korkeamman tason grafiikkakirjastoja Hyvä selain- ja työkalutuki Esimerkkejä: http://www.creativebloq.com/css3/animation-with-css3-7 12437 http://www.w3.org/tr/css3-animations/

Flash Adoben oma teknologia (ei avoin standardi) monimutkaisille animaatioille, esim. pelit 2D- (ja 3D-)vektorigrafiikkaa ActionScriptillä 3D pystyy hyödyntämään tietokoneen GPU:ta Saatavilla korkeamman tason grafiikkakirjastoja Hyvä selain- ja työkalutuki Vaatii liitännäisen (Adobe Flash Player) asentamisen selaimeen Ei toimi kaikissa mobiililaitteissa Muita vastaavia teknologioita mm. Microsoft Silverlight ja Oracle JavaFX http://www.adobe.com/products/flash.html

HTML Canvas 2D Context W3C:n suositusehdotus monimutkaisille animaatioille, esim. pelit Uusi versio työluonnosvaiheessa, http://www.w3.org/tr/2dcontext2/ 2D-pikseligrafiikkaa JavaScriptillä Käyttää HTML5 <canvas> Pystyy hyödyntämään tietokoneen GPU:ta Saatavilla korkeamman tason grafiikkakirjastoja Hyvä selain- ja työkalutuki http://www.w3.org/tr/2dcontext/

JavaScript-kirjastot Useita toteutuksia yksinkertaisille animaatioille, esim. efektit jquery, GSAP12,... 2D-pikseligrafiikkaa JavaScriptillä Eivät käytä (tässä yhteydessä) HTML5 <canvas> Pystyy hyödyntämään tietokoneen GPU:ta WebCL:n kautta, https://cvs.khronos.org/svn/repos/registry/trunk/public/webcl/spe c/latest/index.html Erinomainen selain- ja työkalutuki

Scalable Vector Graphics (SVG) W3C:n suositus yksinkertaisille animaatioille, esim. efektit 2D-vektorigrafiikkaa XML:llä Pystyy hyödyntämään tietokoneen GPU:ta Saatavilla korkeamman tason grafiikkakirjastoja Hyvä selain- ja työkalutuki Suora DOM-integraatio <body> <svg height="100" width="500"> <ellipse cx="240" cy="50" rx="220" ry="30" style="fill:yellow" /> <ellipse cx="220" cy="50" rx="190" ry="20" style="fill:white" /> Sorry, your browser does not support inline SVG. </svg> </body> http://www.w3.org/tr/svg/

Web-based Graphics Library (WebGL) Khronos Group:n spesifikaatio monimutkaisille animaatioille, esim. pelit 3D-pikseligrafiikkaa JavaScriptillä (OpenGL ES 2.0) Käyttää HTML5 <canvas> Pystyy hyödyntämään tietokoneen GPU:ta Saatavilla korkeamman tason grafiikkakirjastoja Hyvä selain- ja työkalutuki Toimii nyt myös IE:ssä https://www.khronos.org/registry/webgl/specs/1.0/

Animointiteknologioiden vertailu Teknologia Standardi Käyttötarkoitus Grafiikka Ohjelmointi Selain- ja työkalutuki CSS Animations W3C:n työluonnos yksinkertaiset animaatiot, 2D & 3D, esim. efektit pikseli CSS, deklaratiivinen ++ Flash Adoben liitännäinen selaimeen monimutkaiset animaatiot, 2D (& 3D), esim. pelit vektori ActionScript, imperatiivinen ++ HTML Canvas 2D Context + <canvas> W3C:n suositusehdotus monimutkaiset animaatiot, 2D, esim. pelit pikseli JavaScript, imperatiivinen ++ JavaScript-kirjastot useita toteutuksia yksinkertaiset animaatiot, 2D, esim. efektit pikseli JavaScript, imperatiivinen +++ SVG W3C:n suositus yksinkertaiset animaatiot, 2D, esim. efektit vektori XML, deklaratiivinen ++ WebGL + <canvas> Khronos Group:n spesifikaatio monimutkaiset animaatiot, 3D, esim. pelit pikseli JavaScript (OpenGL ES 2.0), imperatiivinen ++

HTML5 Canvas

Yleiskuvaus Käyttötarkoitus Tarjoaa piirtoalueen, johon voi lennossa piirtää 2D- ja 3D-pikseligrafiikkaa sekä kuvia JavaScript API:n avulla. HTML5 <canvas> W3C:n suositusehdotus, elokuu 2013, http://www.w3.org/tr/html5/embedded-content-0.html#t he-canvas-element Selaintuki Chrome 4.0+, Firefox 2.0+, IE 9.0+, Opera 9.0+, Safari 3.1+

Selaintuki http://caniuse.com/#search=canvas

Piirtoalueen rajapinta Ominaisuudet Metodit height getcontext(... ) width toblob(... ) Tapahtumat todataurl(... ) http://www.w3.org/tr/html5/embedded-content-0.html#the-canvas-element

Ominaisuudet height Määrittelee piirtoalueen korkeuden. Alustuksessa määritelty arvo voidaan määritellä myöhemmin uudelleen CSS:n avulla. Vakioarvo: 150 (px) width Määrittelee piirtoalueen leveyden. Alustuksessa määritelty arvo voidaan määritellä myöhemmin uudelleen CSS:n avulla. Vakioarvo: 300 (px)

Metodit getcontext( kontekstiid [,... ] ) Palauttaa kontekstiobjektin (tai null), joka tarjoaa JavaScript API:n piirtoalueelle piirtämistä varten. KontekstiID: 2d tai webgl. Ei vakioarvoa toblob( vastakutsu [, tyyppi,... ] ) Palauttaa piirtoalueen kuvan Blob-objektina (tai null). Tyypin vakioarvo: image/png todataurl( [ tyyppi,... ] ) Palauttaa piirtoalueen kuvan data:url:na (tai data:,). Tyypin vakioarvo: image/png

Koordinaatisto (0, 0) x (6, 2) y

Koko näyttöalan käyttöönotto 1) HTML määrittelyt 2) CSS määrittelyt

Koko näyttöalan käyttöönotto 3) JavaScript määrittelyt

HTML Canvas 2D Context

Yleiskuvaus Käyttötarkoitus Tarjoaa JavaScript API:n, joka mahdollistaa 2D-pikseligraafikan ja -kuvien lennossa piirtämisen ja animoinnin piirtoalueelle. HTML Canvas 2D Context W3C:n suositusehdotus, elokuu 2014, http://www.w3.org/tr/2dcontext/ Selaintuki Chrome 4.0+, Firefox 2.0+, IE 9.0+, Opera 9.0+, Safari 3.1+

Toiminnot Muotojen (esim. suorakulmiot ja ympyrät) piirtäminen Tekstien piirtäminen Gradienttien, kuosien ja varjojen piirtäminen Kuvien piirtäminen ja pikselimanipulaatioiden tekeminen Mukaan lukien liitosoperaatioiden tekeminen Piirtoalueen tilojen tallentaminen ja palauttaminen Piirtoaluemuunnosten (esim. siirto ja kierto) tekeminen Piirtoaluekuvan tallentaminen

Yleiset ominaisuudet canvas Palauttaa 2D-konteksti API:iin liitetyn piirtoalueen. Ei vakioarvoa http://www.w3schools.com/tags/ref_canvas.asp

Muotojen piirtäminen

Toiminnot Ominaisuudet Tyylit suorille viivoille, ääriviivoille, täytöille ja osittain teksteille Esim. väri ja paksuus Metodit Muotojen piirtäminen mukaan lukien ääriviivat ja täytöt Esim. suorat viivat, käyrät, polut, suorakulmiot, monikulmiot ja ympyrät

Rajapinta muotojen piirtämiseen Ominaisuudet Metodit Metodit fillstyle rect(... ) beginpath() strokestyle fill() & (... ) closepath() linewidth stroke() & (... ) moveto(... ) linecap fillrect(... ) lineto(... ) linejoin strokerect(... ) clip() & (... ) miterlimit clearrect(... ) ispointinpath(... ) & (... ) arc(... ) scrollpathintoview() & (... ) arcto(... ) drawsystemfocusring(... ) & (... ) quadraticcurveto(... ) drawcustomfocusring(... ) & (... ) beziercurveto(... ) addpath(... ) (Path) http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Muotojen piirtäminen

Ympyröiden kulmat http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-advanced-drawing/

Ympyröiden kulmat http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-advanced-drawing/

Tekstien piirtäminen

Toiminnot Ominaisuudet Fontti, tasaus,... Metodit Tekstien piirtäminen mukaan lukien ääriviivat ja täytöt Tekstin ominaisuuksien mittaaminen

Rajapinta tekstin piirtämiseen Ominaisuudet Metodit font filltext(... ) textalign stroketext(... ) textbaseline measuretext(... ) width (TextMetrics) http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Tekstien piirtäminen

Gradienttien, kuosien ja varjojen piirtäminen

Toiminnot Ominaisuudet Varjojen väri, sumentuvuus ja etäisyys Metodit Erilaisten gradienttien piirtäminen Kuosien piirtäminen Varjojen piirtäminen

Rajapinta gradienttien, kuosien ja varjojen piirtämiseen Ominaisuudet Metodit shadowoffsetx createlineargradient(... ) shadowoffsety createradialgradient(... ) shadowblur addcolorstop(... ) (CanvasGradient) shadowcolor createpattern(... ) http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Gradienttien piirtäminen

Kuosien piirtäminen

Varjojen piirtäminen

Kuvien piirtäminen ja pikselimanipulaatioiden tekeminen

Toiminnot Ominaisuudet Kuvaolio ja sen tiedot Esim. leveys ja korkeus Läpinäkyvyys Liitosoperaatiomenetelmä Metodit Kuvien piirtäminen Pikselimanipulaatioiden tekeminen

Rajapinta kuvien piirtämiseen ja pikselimanipulaatioiden tekemiseen Ominaisuudet Metodit data (ImageData) createimagedata(... ) & (... ) height (ImageData) getimagedata(... ) width (ImageData) putimagedata(... ) & (... ) globalalpha drawimage(... ) & (... ) & (... ) globalcompositeoperation http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Kuvamanipulaatioiden tekeminen

Pikselimanipulaatioiden tekeminen

Pikselitaulukko http://net.tutsplus.com/tutorials/javascript-ajax/canvas-from-scratch-pixel-manipulation/

Liitosoperaatioiden tekeminen http://html5.komplett.cc/code/chap_canvas/screenshots/compositing_operations.jpg

Piirtoalueen tilojen tallentaminen ja palauttaminen

Toiminnot Metodit Piirtoalueen tilojen tallentaminen ja palauttaminen Käteviä piirtoaluemuunnosten kanssa Käyttävät pinoa (FILO = First In, Last Out) Käsittää muunnokset, leikkausalueen sekä muotojen ja tekstien ominaisuudet (globalalpha, globalcompositeoperation, strokestyle, fillstyle, linewidth, linecap, linejoin, miterlimit, shadowoffsetx, shadowoffsety, shadowblur, shadowcolor, font, textalign ja textbaseline)

Rajapinta piirtoalueen tilojen tallentamiseen ja palauttamiseen Metodit save() restore() http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Piirtoaluemuunnosten tekeminen

Toiminnot Metodit Erilaisten piirtoaluemuunnosten tekeminen Esim. kiertäminen ja siirtäminen Muunnokset koskevat koko koordinaatistoa

Muunnettu koordinaatisto context.translate( 2, 1); (0, 0) (0, 0) x (6, 2) y (6, 2)

Rajapinta piirtoaluemuunnosten tekemiseen Metodit scale(... ) rotate(... ) translate(... ) transform(... ), suhteellinen muunnos edellisiin nähden settransform(... ), absoluuttinen muunnos edellisiin nähden http://www.w3.org/tr/2dcontext/#canvasrenderingcontext2d

Skaalauksien tekeminen

Kiertojen tekeminen

Siirtojen tekeminen

Absoluuttisten (tai suhteellisten) muunnosten tekeminen

Animointi

Timing control for script-based animations (requestanimationframe) Käyttötarkoitus Tarjoaa JavaScript API:n animointiin, jonka ansiosta optimaalisen animointinopeuden määritys voidaan siirtää ohjelmoijalta selaimelle. Timing control for script-based animations W3C:n työluonnos, lokakuu 2013, http://www.w3.org/tr/animation-timing/ Selaintuki Chrome 10.0+, Firefox 4.0+, IE 10.0+, Opera 15.0+, Safari 6.0+

Väärä tapa animoida setinterval function animate(){ // update objects } // animate at 30 fps setinterval(animate, 1000 / 30);

Väärä tapa animoida settimeout function animate(){ //update objects // animate at ~30 fps settimeout(animate, 1000 / 30); }

Rajapinta animointiin Oikea tapa Metodit requestanimationframe( ) cancelanimationframe( ) http://www.w3.org/tr/animation-timing/

requestanimationframe() Selain valitsee parhaan ajan animoinnille Animointi pysähtyy kun ikkuna ei ole aktiivisena Ei mahdollisuutta asettaa aikaa itse Kuitenkin välittää ajan (millisekunteina 1970 luvun alusta) kutsutulle funktiolle (epoch time)

requestanimationframe() function animate(time){ //update objects framehandle = requestanimationframe(animate); } var framehandle = requestanimationframe(animate); FrameHandle on tarpeellinen, jos jossain tilanteessa haluaa pysäyttää animaation. RequestAnimationFrame komennon voi tällöin peruuttaa komennolla: cancelrequestanimationframe(framehandle);

Animaatioiden tekeminen Perusvaiheet 1. 2. 3. 4. 5. 6. 7. Määrittele yleiset muuttujat (esim. velocityx ja velocityy) Määrittele objektit (JavaScript-luokat) Alusta objektit Tyhjennä piirtoalue (koko tai muuttunut osa) Piirrä objektit AnimaatioMuuta objektien tiloja silmukka Tarkista törmäykset, vuorovaikutus, yms. ehdot Toista vaiheita 4-7, kunnes animaatio/peli loppuu (tutoriaali: http://billmill.org/static/canvastutorial/)

Animaatioesimerkki

Frames per second (FPS) Kuinka monta kuvaa piirretään sekunnissa (kuvia sekuntia kohden) Vaihtelee tietokoneen suorituskyvystä ja kuormituksesta riippuen

Frame-based motion Nopeus muodossa pixels/frame Voidaan ajatella animoinnissa, että jokin objekti liikkuu tietyn matkan jokaisella uudella kuvalla Ohjelmoijan helpompi ymmärtää Mutta: Vaihteleva FPS aiheuttaa sen, että välillä objektit liikkuvat nopeammin ja välillä hitaammin, jos objektin nopeus on määritelty esim. 150 pikseliä x-suunnassa / frame 120 pikseliä y-suunnassa / frame

Frame-based motion pixels / frame = (pixels / second) / fps tai pixels / frame = (pixels / second) * (second / frame) Jos objektin on määrä liikkua 200 pikseliä sekunnissa, ja FPS on 50, silloin sen pitää liikkua tässä framessa 4 pikseliä. (delta on 4) 200/50 = 4

Time-based motion Nopeus muodossa pixels/second Time-based motion = pixels/second on vakio Tällöin nopeus pysyy ajansuhteen vakiona riippumatta kuinka monta kuvaa tietokone pystyy piirtämään sekunnissa (eli riippumatta fps:stä)

Time-based motion var velocityx = 50; // 50 pixels per second var velocityy = 100; // 100 pixels per second animate(time){ // epoch time var elapsedtime = time - lasttime; deltax = velocityx * (elapsedtime / 1000); deltay = velocityy * (elapsedtime / 1000); obj.x = obj.x + deltax; obj.y = obj.y + deltay; lasttime = time; }

Time-based motion vs. Frame-based motion var velocityx = 50; // 50 pixels per second var velocityy = 100; // 100 pixels per second var velocityx = 50; // 1 pixel per second var velocityy = 100; // 2 pixels per second animate(time){ var elapsedtime = time - lasttime; animate(time){ deltax = velocityx * (elapsedtime / 1000); deltay = velocityy * (elapsedtime / 1000); obj.x = obj.x + deltax; obj.y = obj.y + deltay; deltax = velocityx; deltay = velocityy; obj.x = obj.x + deltax; obj.y = obj.y + deltay; lasttime = time; } }

Spritet Pikseligrafiikkana toteutettuja pelihahmoja Usein osittain läpinäkyviä (kuvassa musta) Yleisiä jo hyvin vanhoissa, esim. Commodore 64 ja Amiga:n peleissä Aiemmin toteutettu laitteistotasolla, PC:ssä ohjelmoitavia

Ilmaisia spritejä esim. http://content.gpwiki.org/index.php/game_content_resources#sprites

Sprite kuvien lataaminen // Load Sprite Sheet var marioimage = new Image(); marioimage.src = "img/smb_sprites.png"; // Document ready -> Load sprite sheet image (jquery syntax) $( document ).ready(imageloader); // Image loaded -> start animation function imageloader(){ marioimage.onload = function() { animationframe = requestanimationframe(animate); }; }

Sprite kuvien lataaminen // Notify Loader object that an image was loaded succesfully Loader.notifyImageLoad = function() { spritesloaded++; // When all sprites loaded, notify Loader to continue if (spritesloaded === totalnumberofsprites) { Loader.allSpritesLoaded(); } }

Spriten piirto ja päivitys function sprite (options) { var that = {}; that.context = options.context; that.width = options.width; that.height = options.height; that.image = options.image; // Load Sprite Sheet var playerimage = new Image(); playerimage.src = player_sprite_sheet.png"; // Create sprite var player = sprite({ context: cnv.getcontext("2d"), width: 26, height: 35, image: playerimage }); // Draw current sprite image that.render = function () { // Draw sprite that.context.drawimage( ); }; // Update sprite frame index that.update = function () { }; return that; } frameindex based image crop (x) frameindex 0 1 2 3 4 5 6 7 8 9 10 11

Näppäinkomennot ja liikutus event.preventdefault() estää komentoja valumasta eteenpäin (esim. selaimelle) Lisätietoa:http://www.markupjavascript.com/2013/10/event-bubbling-how-to-prevent-it.html var KEYCODE_LEFT = 37; var KEYCODE_UP = 38; var KEYCODE_RIGHT = 39; var KEYCODE_DOWN = 40; $(document).keydown(function(e) { if (e.keycode == KEYCODE_ESC) { cancelanimationframe(aniframe); } if (e.keycode == KEYCODE_LEFT) { e.preventdefault(); // do something } if (e.keycode == KEYCODE_RIGHT) { e.preventdefault(); // do something } if (e.keycode == KEYCODE_UP) { e.preventdefault(); // do something } if (e.keycode == KEYCODE_DOWN) { e.preventdefault(); // do something } });

Hiirikoordinaattien muuntaminen canvas-koordinaatistoon Perustapaus - canvas.getboundingclientrect() function getmousepos(canvas, evt) { var rect = canvas.getboundingclientrect(); return { x: evt.clientx - rect.left, y: evt.clienty - rect.top }; }

Hiirikoordinaattien muuntaminen canvas-koordinaatistoon Jos canvaksen kokoa skaalattu CSS:llä function getmousepos(canvas, evt) { var rect = canvas.getboundingclientrect(); return { x: evt.clientx - rect.left * (canvas.width / rect.width), y: evt.clienty - rect.top * (canvas.height / rect.height) }; }

Törmäystarkistus Useita eri tapoja toteuttaa Yksinkertaisin on käyttää tarkistukseen neliskulmaisia objektien reunoja rajaavia laatikoita (bounding box) * *Image from Starling Framework the Open Source Game Engine for Flash http://wiki.starling-framework.org/tutorials/basic_collision_detection

Törmäystarkistus seinistä kimpoaminen update: function(){ this.left += this.velocityx; // Update X position this.top += this.velocityy; // Update Y position if((this.left+this.width)>canvasw this.left<0){ // X-axis collision this.velocityx = -this.velocityx; // Invert velocity direction if((this.left+this.width)>canvasw){ // Relocate based on bounce this.left -= (this.left+this.width)-canvasw; } if(this.left<0){ // Relocate based on bounce this.left = -this.left; } } if((this.top+this.height)>canvash this.top<0){ // Y-axis collision this.velocityy = -this.velocityy; // Invert velocity direction if((this.top+this.height)>canvash){ // Relocate based on bounce this.top -= (this.top+this.height)-canvash; } if(this.top<0){ // Relocate based on bounce this.top = -this.top; } } }

Törmäystarkistus Pyöreä rajaus

Yhteenveto ja tehtävänanto

Yhteenveto Animointiin verkossa on useita eri teknologioita Sopivan teknologian valinta riippuu usein vaatimuksista 2D vs. 3D Pikseligrafiikka vs. vektorigrafiikka Efekti vs. peli Saavutettavuus vs. teknologiademo HTML5 <canvas> tarjoaa standardoidun piirtoalueen 2D- ja 3D-pikseligrafiikan piirtämiseen HTML Canvas 2D Context tarjoaa standardoidun JavaScript API:n monimutkaisten 2D-pikseligrafiikka-animaatioiden piirtämiseen piirtoalueelle

Tehtävänanto Jatkakaa aiemmissa harjoituksissa tekemiänne kotisivuja Upottakaa Harjoitukset-sivulle HTML5 <canvas> ja toteuttakaa siihen 2D-animaatio HTML Canvas 2D Context JavaScript API:n avulla Tehtävät on rakennettava itse valitun teeman ympärille Harjoitus tehdään itsenäisesti Harjoituksen vaatimukset sekä tarkempi tehtävänanto löytyvät kurssin MyCourses-sivuilta Harjoitustyöt-osiosta Palauttakaa harjoitus kurssin DIME-palvelimelle viimeistään maanantaina 10.4.2017 klo 18.00 mennessä Työ tarjoaa erittäin hyvän pohjan projektityölle!

http://www.nihilogic.dk/labs/canvas_sheet/html5_canvas_cheat_sheet.pdf

O Reilly Media 2013 (2nd Ed.) # of pages 750 ISBN 978-1449334987 http://corehtml5canvas.com/

Prentice Hall 2012 (1st Ed.) # of pages 752 ISBN 978-0132761611 http://corehtml5canvas.com/

Linkkejä http://www.html5canvastutorials.com/ http://net.tutsplus.com/sessions/canvas-from-scratch/ http://corehtml5canvas.com/ http://diveintohtml5.info/canvas.html http://billmill.org/static/canvastutorial/ http://www.canvasdemos.com/ http://www.w3schools.com/tags/ref_canvas.asp

KIITOS! ville.kumpulainen@aalto.fi