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

Samankaltaiset tiedostot
Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

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

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

Projektityö ja pelikehitys

Projektityö ja pelikehitys

KODU. Lumijoen peruskoulu

HTML5 video, audio, canvas. Mirja Jaakkola

Venekilpailu! Esteiden väistely ja hahmon ohjaaminen

Ampumahiihto. Hiihto. Pelihahmon piirtäminen. Jos tahdot animoida hiihtämisen, Peli muodostuu kahdesta erilaisesta osasta: ensin

Sukelluskeräily, Pelihahmon liikuttaminen. Tee uusi hahmo: Pelihahmo. Nimeä se. Testaa ikuisesti -silmukassa peräkkäisinä testeinä (jos) onko jokin

Scratch ohjeita. Perusteet

T harjoitustehtävät, syksy 2011

Alkuun HTML5 peliohjelmoinnissa

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

moodle.seamk.fi teknisiä ohjeita

Tikon Web-sovellukset

Harjoitus Bones ja Skin

Tasohyppelypeli. Piirrä grafiikat. Toteuta pelihahmon putoaminen ja alustalle jääminen:

Moodle-oppimisympäristö

Harjoitustyöinfo kevät TU-A1100 Tuotantotalous 1

Harjoitustehtäväkierros 1

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

4 Google. Eetu Kahelin ja Kimi Syrjä DAT 17

Tämä ohje on toistaiseksi PDF-muodossa. Palataan normaaliin html-muotoon kesän 2014 aikana.

Tikon Web-sovellukset

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

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

T harjoitustyö, kevät 2012

1. Taustatietoa näppäimistönkuuntelusta

TEEMA 2 Aineistot. Kirjautuminen Moodleen. Sisältö. Kirjaudut Moodleen sivulta Voit vaihtaa kielen valikosta.

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

GeoGebra-harjoituksia malu-opettajille

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

Suvi Junes Tietohallinto / Opetusteknologiapalvelut 2012

Ohjeita peda.net palvelun Luo uusi osioon


Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Racket ohjelmointia II. Tiina Partanen 2015

Ohje sähköiseen osallistumiseen

Google Sites: sivun muokkaaminen (esim. tekstin, kuvien, linkkien, tiedostojen, videoiden ym. lisääminen)

Suvi Junes Tietohallinto / Opetusteknologiapalvelut 2013

KÄYTTÖOHJE. Servia. S solutions

Sukelluskeräily. Pelihahmon liikuttaminen. Aarre ja pisteet

OHJE Jos Kelaimeen kirjautuminen ei onnistu Mac-koneella Sisällys

Suvi Junes Tietohallinto / Opetusteknologiapalvelut 2012

ohjeita kirjautumiseen ja käyttöön

Ohje vanhemmille - näin alkuun Päikyssä

Suvi Junes/Pauliina Munter Tietohallinto / Opetusteknologiapalvelut 2014

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

Labyrintti. Pelihahmon toiminta. Piirrä pelihahmo (älä piirrä esim. sivusta, ettei hahmon tarvitse

Ohje 1 (12) Maarit Hynninen-Ojala MOODLE PIKAOHJE. Kirjautuminen Moodleen ja työtilan valitseminen

Ohje sähköiseen osallistumiseen

Verkkosivut perinteisesti. Tanja Välisalo

KTKO104 Demo 3. Marika Peltonen

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

A&O:n käyttöohje. 1. Rekisteröityminen ja kurssille ilmoittautuminen. 2. Sisäänkirjautuminen. (Lisää löydät osoitteesta:

Harjoitustyöinfo kevät TU-A1100 Tuotantotalous 1

Paperiton näyttösuunnitelma

OHJE Jos Kelaimeen kirjautuminen ei onnistu Windows-koneilla

Tietokannan luominen:

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Tekninen suunnitelma - StatbeatMOBILE

UpdateIT 2010: Uutisten päivitys

Google Forms / Anna Haapalainen. Google Forms Googlen lomake-työkalu

Echo360 - luentovideot. Ohjeita opiskelijalle

Videon tallentaminen Virtual Mapista

Harjoitus Morphing. Ilmeiden luonti

Moodle 2.2 pikaohje. 1. Kirjautuminen ja omat kurssit (Työtilat) 1. Mene internet-selaimella osoitteeseen

ORGANISAATION KIRJAUTUMINEN TURVASIRU.FI-PALVELUUN

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

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

Windows 10 -käyttöohje

MOODLE-OHJE: Liitetiedoston lisääminen ja päivittäminen

NOVAPOINT Soundings Editor 3.3

Rämpytysralli. Pelikehys sisältää GameObject luokan, Scene luokan, SceneManager luokan, InputListener luokan, StaticImage luokan

eportfolio ammatillisen kasvun ja oman osaamisen kuvaaminen

Jypelin käyttöohjeet» Ruutukentän luominen

TimeEdit opiskelijan ohje TimeEdit-instructions for students from this link

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

YH1b: Office365 II, verkko-opiskelu

Moodlen lohkot. Lohkojen lisääminen: Lohkojen muokkaaminen: Tampereen yliopisto/tietohallinto 2017 Suvi Junes

Oma kartta Google Maps -palveluun

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

Kirjaudu sisään palveluun klikkaamalla Omat kartat -painiketta.

TEKSTINKÄSITTELYTEHTÄVIÄ, OSA 1

Suvi Junes/Pauliina Munter Tietohallinto/Opetusteknologiapalvelut 2014

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Chess Action Game (Shakkiseikkailu)

Ohje vanhemmille - näin alkuun Päikyssä

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

MOODLE 2.5 OPISKELIJAN PIKAOPAS. Hyvinkään lukiot. Versiota päivitetään myöhemmin

ILMAINEN KARTTATIETO

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Testausdokumentti. Sivu: 1 / 10. Ohjelmistotuotantoprojekti Sheeple Helsingin yliopisto. Versiohistoria

Transkriptio:

Harjoitustyö 5: 2D-animointi verkkosivuilla (HTML5 Canvas) Kurssin viidennessä harjoitustyössä tutustutaan 2D-animoinnin toteuttamiseen verkkosivuille HTML5 Canvas -elementin ja JavaScriptin (HTML Canvas 2D Context JavaScript API) avulla. Harjoitustyö koostuu tehtävistä, jotka yhdessä muodostavat yksinkertaisen pelin rungon. Peliin tulee liikkuvia vihollisia ja pelaaja, jota käyttäjä voi liikuttaa. Viholliset ja pelaajat kimpoavat pelissä toisistaan. Toteutettavien tehtävien on liityttävä annettuun teemaan. Harjoitustyö tehdään itsenäisesti. Harjoitustyötä varten on kurssille määritelty yksi luento (21.3.2017) sekä yksi ohjattu viikkoharjoitus (28.3.2017). Yleisesti ottaen luennot tarjoavat kattavan tietopaketin harjoitustyöaiheeseen. Viikkoharjoituksissa puolestaan opiskelijat voivat tehdä harjoitustöitä sekä tarvittaessa kysyä neuvoa assistenteilta ( Hanna Hämäläinen, Ville Kumpulainen, Aleksi O Connor ), mikäli harjoitustöiden kanssa ilmenee ongelmia. Voit myös lähettää sähköpostia assistenteille (tämän harjoitustyön tapauksessa ensisijaisesti Ville Kumpulainen ). Perustehtävien vaatimukset (0-3 pistettä) Tehtävä 1: JavaScript-luokat Ensimmäisessä tehtävässä toteutetaan pelin runkoon tarvittavien JavaScriptluokkien luonnokset. Tehtävässä ei tarvitse tehdä varsinaisia JavaScript-luokkia (Prototype), tehtävän tekeminen onnistuu helpommin simuloimalla luokkia JavaScript-olioiden avulla. Alla vaatimuslista: Valitse verkkosivustostasi sivu, johon haluat toteuttaa pelin rungon. Tätä sivua kutsutaan tässä tehtävänannossa jatkossa pelisivuksi. Voit käyttää joko olemassa olevaa sivua tai luoda uuden sivun (esim. animation.html) Luo JavaScript-tiedosto ( player.js ), johon toteutetaan pelaaja -olio sekä siihen liittyvä ohjelmakoodi. Tässä vaiheessa ei tarvitse toteuttaa vielä varsinaisia metodeita, mutta kannattaa toteuttaa luokan runko ja hahmotella sen tarkoitusta. Voit toteuttaa luokan haluamallasi tavalla, mutta luokka voi esimerkiksi koostua seuraavista palasista: Pelaaja-olio, jolle annetaan tietyt alkuarvot sijainnille (x ja y), nopeudelle (mielivaltainen luku), sekä muita ominaisuuksia joita pelaajalla mahdollisesti on. Metodit, joilla muokataan pelaajan ominaisuuksia. Näitä voi olla esimerkiksi: move(), jolle annetaan parametriksi liikesuunta (muuttaa pelaajan x- tai y-sijaintia nopeuden verran) changespeed(), kasvattaa tai pienentää pelaajan nopeutta reset(), palautttaa pelaajan alkuarvoihin Linkitä ko. tiedosto pelisivulle.

Luo JavaScript-tiedosto ( enemy.js ), johon toteutetaan vihollinen -luokka. Luokkaan kirjoitetaan tästä eteenpäin kaikki viholliseen liittyvä ohjelmakoodi. Enemy-luokkaa kannattaa lähteä tekemään pääosin samalla tavalla kuin pelaaja-luokkaa. Erona on se, että vihollisia voidaan luoda enemmän kuin yksi. Siis: Taulukko, johon tallennetaan enemy-olioita. Metodi create(), joka luo enemy-olion tietyillä alkuarvoilla. Voi olla, että pelisi kannalta on mielekästä arpoa viholliselle satunnainen sijainti ja nopeus. Metodi move(), joka käy läpi enemy-taulukon ja siirtää kaikkia sen sisältämiä enemy-olioita...sekä muita pelisi vihollisen kannalta mahdollisesti oleellisia metodeja. Linkitä ko. tiedosto pelisivulle. Luokkia on tarkoitus parannella ja täydentää tarpeen mukaan harjoitustyön myöhemmissä tehtävissä. Tehtävä 2: Canvas ja piirtäminen Toisessa tehtävässä opetellaan piirtämään staattisia kuvia HTML5 Canvas - elementille (piirtoalue). Alla vaatimuslista: Luo pelisivulle HTML5 Canvas elementti ( <canvas> ). Luo JavaScript-tiedosto ( animation.js ), johon tästä eteenpäin kirjoitetaan kaikki 2D-animaatioon liittyvä ohjelmakoodi. Linkitä ko. tiedosto pelisivulle, jossa 2D-animaatio on tarkoitus näyttää. (Vinkki: laita kaikki animation.js tiedoston koodi window.onload() tai jquery:n $(document).ready() -funktion sisään) Hae aluksi viittaus canvas-elementtiisi: var canvas = document.getelementbyid var ctx = canvas.getcontext("2d"); Piirrä piirtoalueelle yksi kappale pelaajia ja sijoita se piirtoalueen keskelle. Muokkaa tehtävässä 1 määrittelemääsi pelaaja -luokkaa tarpeen mukaan. Toimi tarvittaessa vastaavasti myös seuraavissa tehtävissä, vaikka sitä ei ole erikseen mainittu. Pelaajan ulkoasu on esitettävä staattisen pikseligrafiikkakuvan avulla. Etsi tätä varten itsellesi sopiva kuva tai piirrä se itse. Pääset jatkossa helpoimmalla kun laajennat pelaaja-luokkaasi lisäämällä siihen draw()-metodin, joka ottaa parametriksi viittauksen canvakseen (ctx), ja piirtää siihen pelaaja-oliossa määriteltyjen parametrien mukaan pelaajan. Voit myös lisätä pelaajan esittämiseen käytettävän kuvan suoraan player.js tiedostoon. Piirrä piirtoalueelle vähintään neljä kappaletta vihollisia siten, että ne eivät sijoitu toistensa tai pelaajan päälle. Muokkaa tehtävässä 1 määrittelemääsi vihollinen -luokkaa tarpeen mukaan.

Jälleen on suositeltavaa muokata enemy-luokkaasi kuten player-luokkaa yllä, ja ulkoistaa kaikki mahdollinen koodi sinne. Tehtävä 3: Spritet ja animaatiosilmukka Kolmannessa tehtävässä opetellaan spritejen käyttöä ja animaatiosilmukan tekemistä. Jos jäät jumiin, voit katsoa mallia tästä tutoriaalista, jossa on tehty hyvin samanlainen peli: http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/ Alla vaatimuslista: Tehtävässä 2 käytetyt staattiset kuvat vaihdetaan spriteiksi. Etsi tätä varten itsellesi sopivat spritet (engl. sprite sheet) sekä pelaajaa että vihollisia varten tai piirrä ne itse. Valmiita spritejä löytyy esimerkiksi täältä: http://letsmakegames.org/resources/art-assets-for-game-developers/. Pelaajan ja vihollisten spriteiltä pitää löytyä erilliset tilat (engl. frame) sekä lepo- että liikeanimointiin. Löydät apua spriten toteuttamiseen esimerkiksi täältä: http://www.williammalone.com/articles/create-html5-canvas-javascript -sprite-animation/ Määrittele animointia varten tarvittavat muuttujat, kuten kokonaislukuindeksi, joka kertoo, mikä spriten tila on tällä hetkellä aktiivinen. Määrittele animaatiosilmukan oma funktio ja sille erilliset apufunktiot, kuten piirtoalueen tyhjennys (esim. clear() ) ja piirtoalueelle piirto (esim. render() ). Käynnistä animaatiosilmukka ( requestanimationframe ) ja piirrä tehtävän 2 tapaan piirtoalueelle sekä pelaaja että viholliset spritejä käyttäen. Pelaajan ja vihollisten on tarkoitus tässä vaiheessa pysyä sijaintinsa puolesta paikallaan piirtoalueella. Toisin sanoen, ne eivät vielä liiku ylös tai alas, mutta niiden paikallaoloa animoidaan lepoanimaatiota käyttäen. Animoinnin voit tehdä esimerkiksi siten, että spriten tilaa vaihdetaan aina silloin, kun animaatiosilmukan funktiota on kutsuttu tietty määrä kertoja. Voit vaihtaa tilaa vaikka joka 30. funktiokutsun kohdalla, jolloin spriten tila vaihtuu noin puolen sekunnin välein. Tehtävä 4: Vuorovaikutus Neljännessä tehtävässä toteutetaan näppäimistö- ja hiiritapahtumiin pohjautuva pelinohjaus. Alla vaatimuslista: Pelaajaa pitää pystyä liikuttamaan piirtoalueella nuolinäppäimiä käyttäen. Täältä löytyy ohjeita, miten estää nuolinäppäinten oletustoiminta selaimissa: http://www.markupjavascript.com/2013/10/event-bubbling-how-to-pr event-it.html. Vihollisia pitää pystyä poistamaan piirtoalueelta painamalla hiiren vasenta nappia ( mousedown -tapahtuma) niiden päällä. Vinkki: Muunna ikkunan hiirikoordinaatit HTML5 Canvas -elementin koordinaateiksi.

Piirrä piirtoalueelle napit pelaajan liikenopeuden hidastamista ja kasvattamista varten. Vinkki: tässä voi olla hyödyllistä käyttää pelaaja-luokkasi changespeed-metodia. Tehtävä 5: Törmäystestit Viidennessä tehtävässä toteutetaan törmäystestit JavaScript-luokille. Alla vaatimuslista: Pelaaja ei voi mennä piirtoalueen ulkopuolelle, eli sen pitää törmätä seiniin. Vihollisten pitää liikkua itsestään piirtoalueella. Liikerata on vapaavalintainen. Mikäli vihollinen törmää seinään, toiseen viholliseen tai pelaajaan, niin sen pitää vaihtaa kulkusuuntaa. Jos olet toteuttanut luokkiisi move-metodit, törmäystestit kannattaa tehdä niiden sisällä (jos edessä on este, sijainti ei muutu) Yleistä Riittää, että harjoitustyö on testattu ja se toimii jollain seuraavista selaimista: (1) Google Chrome, (2) Mozilla Firefox tai (3) Apple Safari. Mikäli tehtävänannon suhteen on epäselvyyksiä, niin ota yhteyttä kurssin henkilökuntaan joko postituslistan kautta tai viikkoharjoituksissa. Bonustehtävän vaatimukset (0-1 pistettä) Bonustehtävä on astetta haastavampi ja sen voi suorittaa vain, jos on tehnyt/yrittänyt tosissaan tehdä kaikki perustehtävät. Tehtävä 6: Pelilliset elementit Jatka edellisissä tehtävissä toteutettua 2D-animaatiota siten, että lopputuloksena on yksinkertainen peli. Laajennusesimerkkejä (toki myös muutkin mahdollisia): Pelissä on jokin tavoite/maali Pelissä kerätään pisteitä & TOP-10 -lista Pelissä voi tuhota vihollisia Mahdollisuus aloittaa uusi peli Pelaajalla on monta elämää Ohjelmistot Harjoitustyö tehdään asiakaspään web-teknologioita käyttäen, tarkemmin sanottuna HTML5 Canvas -elementin ja JavaScript-kielen (HTML Canvas 2D Context JavaScript API) avulla. Muitakin HTML5 Canvas -elementtiä hyödyntäviä teknologioita/grafiikkakirjastoja/api:ja (kuten http://www.pixijs.com/) saa käyttää, mutta ei tarvitse, koska nämä käydään perusteellisemmin läpi kurssin viimeisellä luennolla. Harjoitustyön tekemiseen ei saa käyttää palvelinpään ohjelmointikieliä (esim. PHP), sillä Github pages ei tue näitä. Lisäksi harjoitustyön tekeminen vaatii vapaavalintaisen ohjelmointiympäristön tai tekstieditorin (esim. Sublime Text, Brackets, Atom, Webstorm tai GNU Emacs ) käyttämistä. Harjoitustyön tekemiseen ei saa käyttää visuaalista editoria vaan ohjelmakoodi on kirjoitettava käsin.

Arvostelu Harjoitustyö arvostellaan asteikolla hyväksytty (1-4 pistettä) tai hylätty (merkittäviä puutteita). Arvostelussa huomioidaan ensisijaisesti vaatimusten täyttyminen sekä panostuksen määrä. Tämän lisäksi harjoitustyön arvosteluun vaikuttavat sen idea ts. kuinka vahvasti harjoitustyö liittyy Viestintä 2 -kurssilla annettuun teemaan sekä sen tekninen ja taiteellinen toteutus. Myöhässä palautetut harjoitustyöt arvostellaan samoin perustein, paitsi että jokaiselta alkavalta myöhästymisvuorokaudelta vähennetään 1 piste. Myöhästynyt työ voidaan päästää läpi hyväksyttynä, vaikka myöhästymissakot tiputtaisivat pisteet nollille, mikäli työ muuten täyttää 1 pisteen mukaiset vaatimukset. Hylätyt harjoitustyöt puolestaan uusitaan assistenttien kanssa erikseen sovitun aikataulun mukaisesti tai kurssin lopussa järjestettävän rästikierroksen yhteydessä. Uusintapalautetuista harjoitustöistä voi saada hyväksyttynä vain 0 pistettä. Palautus Harjoitustyö palautetaan Github Pagesiin viimeistään maanantaina 10.4.2017 klo 18.00 mennessä. Palautettujen tehtävien tulisi olla tarkasteltavissa osoitteessa http://etunimisukunimi.github.io Harjoitustyöstä on kirjoitettava lyhyt kuvaus ennen palautuksen määräaikaa MyCoursesiin Harjoitustyö 5:n alle Harjoitustyöt-sivulle. Kuvauksessa voit kertoa mm. harjoitustyön hienouksista/puutteista tai mitkä osiot siitä on toteutettu kolmannen osapuolen komponentein. Kerro myös, mitkä tehtävät teit sekä millä selaimella (+versio) ja käyttöjärjestelmällä (+versio) harjoitustyön pitäisi toimia virheettömästi.