Tečaj
izdelave iger za mobilne telefone

:: Predavatelj: Žiga Hajduković. e-mail. .
:: Organizator: Dane Šoba. e-mail. Študentska organizacija FRI (ŠOFRI).

:: Domača stran tečaja: www.tetris1d.org/game/dev/tecaj/.
:: game/dev.si forum: www.tetris1d.org/game/dev/forum_si/.

:: Študentski info sistem FRI: http://www.student-info.net/fri/.

Novice

Čestitam vsem sodelujočim v velikem nagradnem tekmovanju za najboljšo mobilno igro, ki jo je sponzoriralo priznano podjetje Cocoasoft!
V zelo kratkem času vam je uspelo prekositi same sebe in ustvariti igre, ki so presegle vsa pričakovanja!
Objavili smo galerijo vseh sodelujočih iger, kjer si lahko ogledate posnetke akcije iz samih iger, pa tudi fotografije iz podelitve bogatih nagrad!
Ne pozabite na gd.si forum, kjer si bomo še naprej izmenjevali mnenja in pomagali drug drugemu na poti k izdelovanju najboljših mobilnih iger!

Lekcija 01

:: domov :: lekcija 02

Uvod :: Od ideje .. :: Teorija :: MIDlet paket :: Osnovno razvojno okolje :: Hello World MIDet :: Napredno razvojno okolje :: Delo z Eclipse :: Simple Pong :: Naloge

Uvod

Pozdravljeni na tečaju izdelave iger za mobilne telefone!
Razen osnovnega znanja jave, in seveda izkušenj z igranjem iger, drugih predznanj ne potrebujete.

Zakaj je Java 2 ME idealna platforma za razvoj iger za mobilne telefone:

Kaj pa pa ostale platforme?

Tečaj bo poskušal biti čimbolj intenziven, program pa temelji na temu, da boste čimveč delali tudi doma, sami ali v skupini.

Na koncu tečaja boste:

Na predavanjih se bomo poskušali dotakniti tudi drugih vidikov razvoja iger, npr. kako zasnovati dobro igro (game design) kako obdelati grafiko, da bo primerna za mobilne telefone, in podobno...

Vsak bo prejel zgoščenko z razvojnim okoljem, ki ga bo namestil na računalnik na začetku vsakega predavanja. Na zgoščenki se nahajajo tudi namestitvene datoteke, in navodila za namestitev razvojnega okolja. Našli boste tudi nekaj uporabnih povezav, priročno urejenih po mapah.

Sproti boste dobivali tudi tiskane kopije materiala, ki bodo na voljo tudi na domači strani tečaja. Na domači strani se nahaja tudi forum, kjer bomo reševali probleme in vprašanja med drugimi polovicami tedna in vikendi, ko ne bo predavanj.

Prvo uro vsakega predavanja bo sestavljala teorija, drugo uro pa praktične vaje. Med praktičnimi vajami se boste spoznali s teorijo na primerih in nalogah. Naloge bodo preproste v smislu dodajanja manjših feature-jev ali popravkov v igro. Po lastni želji boste lahko drugo uro delali tudi na lastnih projektih. Mede praktičnimi vajami sem vam 100% na voljo za reševanje problemov in dodatna pojasnila. Pogoste probleme in napake bomo razglasili na glas, tako da se ni za bati, da bi kaj preslišali.

Med tečajem bomo razvili preprosto igro, na princip enostavnega vertikalno pomikajoče vesoljske streljačine (vertical-scrolling space shooter).

Vsako uro bomo postopoma dodajali elemente, od grafike do premikanja sprite-ov, reagiranje na uporabnikov input, nalaganje stopenj, lestvice najboljših, itd...

Vsak bo izbral tudi projekt, ki ga bo prijavil pri predavatelju (meni) in ga bo razvijal doma in na tečaju med praktičnimi vajami. Ob prijavi se bomo na hitro pogovorili še o izvedbi, da ne bi kdo preveč "zabluzil".
Zelo zaželjeno je, da se projekte dela v skupinah! Priporočam velikost skupine največ 3, lahko 4, če bo četrti član večinoma odgovoren za grafiko in/ali zvok.

Izberete lahko npr:

Omejitve:

Projekte prosim, da prijavite najkasneje do naslednjega tedna Končni produkt (končana igra) bo na voljo na domači strani, kjer si ga bodo lahko prenesli in ocenili obiskovalci domače strani.

Predstavitev
Roko-dvižna vprašanja:

Od ideje do produkta

  1. Game Design Overview Document
    Kratek opis igre na eni (največ dveh) strani, ki določa:
  2. Brain storming
  3. Brain storming
  4. Brain storming
  5. Game Design Document
    Razširjen Game Design Overview Document
  6. (Prototyping ?) Opcijska faza projekta, kjer se naredi prototip dela pogona igre (npr. Level paint)
  7. (Game Engine Reuse ?)
  8. Začetek razvoja (kodiranje, grafika, zvok)
  9. Gameplay testing + popravki
  10. Konec razvoja
  11. Porting + Game testing + Bugfixing
  12. Release

Teorija

MIDlet je podobno, kot applet za web, je aplikacija, napisana za J2ME MIDP.

Dva pojma, ki ju bomo srečevali

MIDP API in CLDC API sestavljata osnovo za razvoj J2ME aplikacij.


Slika 1. Arhitektura MIDP aplikacije


Slika 2. Stanja življenskega cikla MIDlet-a

Ukvarjali se bomo predvsem z delom Active.

MIDP UI (user interface) API je sestavljen iz dveh delov: + high-level API / Alert, Form, List, Textbox <- extend <- Screen (to bomo potrebovali za menije) + low-level API / Canvas (To bomo rabili za igro)


Slika 3. Class diagram MIDP osnovnih tipov

MIDlet paket, datoteki JAR in JAD

MIDlet paket (JAR+JAD) je končni produkt, pripravljen za namestitev in izvajanje na napravi.

JAR je preprosta zip datoteka, poimenovana z jar končnico.
JAD je opis JAR paketa, in omogoča napravi, da preveri, če je JAR primeren za izvajanje na njej.
V JAD datoteki je možno podati tudi poljubne parametre, ki jih lahko preberemo znotraj MIDleta.

Primer JAD datoteke:

MIDlet-1: Hello World, /icon.png, HelloWorldMIDlet
MIDlet-Name: HelloWorld Midlet Suite
MIDlet-Version: 1.0.1
MIDlet-Vendor: Janez Novak
MIDlet-Jar-Size: 1785
MIDlet-Jar-URL: HelloWorld.jar
HelloWorld-Text: Hello World!

Primer JAR datoteke:

JAR paket tipično vsebuje

Običajno so *.class datoteke v poddirektorijih, poimenovanih po package-ih v katere spadajo. Vendar pa nas ti dodatni direktoriji stanejo dragocenega prostora v pomnilniku omejenih naprav, saj povečajo velikost JAR paketa. (preizkusi!) Zatorej bomo vse *.java datoteke uvrstili v osnovni package, torej jih bomo pisali brez package ukaza na vrhu.

Osnovno (minimalno) razvojno okolje

Kaj potrebujemo za osnovni razvoj:

  1. Java 2 SDK Standard Edition 1.4.2
  2. J2ME Wireless Toolkit 2.2
  3. Notepad ali poljuben text editor

Odprimo nov WTK projekt:

  1. Zaženemo KToolbar (na Desktop/game_dev/)

    Klknemo "New Project..."

    Vpišemo ime projekta, npr. "Hello" in pod MIDlet Class Name "HelloWorldMIDlet,".
    Kliknemo "Create Project.".

  2. Prikaže se nam okno za nastavitev projekta:

    Izberemo MIDP-1.0, da zagotovimo kompatibilnost z MIDP 1.0 napravami.

  3. Na ekranu imamo sedaj:

  4. Kliknemo "OK" in dobimo:

    KToolbar je za nas skreiral projektno mapo in vse mape, ki spadajo pod njo. Projekt se nahaja pod "c:\WTK22\apps\Hello\". Od tu naprej najdemo .jad datoteko pod bin/, nastavitve projekta kar v "c:\WTK22\apps\Hello\", izvorno kodo pa bomo dodali v src/ podmapo.
    V res/ mapi bomo hranili png slike in ostale ne-java datoteke, npr. stopnje, zvok ...

    Primer HelloWorldMIDlet.java se nahaja v "c:\WTK22\apps\HelloWorld\src".
    Kopiraj datoteko HelloWorldMIDlet.java v "c:\WTK22\apps\Hello\src". Kopiraj tudi datoteko HelloScreen.java v "c:\WTK22\apps\Hello\src", ki jo MIDlet potrebuje.

  5. Poskusimo prevesti projekt. Kliknemo Build.

  6. Poskusimo zagnati MIDlet v emulatorji. Kliknemo "Run" in DefaultColorPhone emulator se bo zagnal.
    V emulatorju kliknemo "Launch" da zaženemo naš MIDlet.
    Dobimo:

Hello World MIDlet

Izvorna koda:

HelloWorldMIDlet.java (izvorna datoteka)

HelloScreen.java (izvorna datoteka)

Primer prikazuje:

Napredno razvojno okolje

Kaj potrebujemo za napredni razvoj:

  1. Java 2 SDK Standard Edition 1.4.2
  2. J2ME Wireless Toolkit 2.2
  3. Java razvojno okolje (IDE), npr. Eclipse + eclipseME
  4. emulatorje, ki jih dobimo na spletni strani proizvajalcev mobilnih telefonov

Poskusimo zagnati Hello World MIDlet v eclipse okolju.

Kako se eclipse J2ME projekt razlikuje od WTK projekta?

  1. Mapa projetka se nahaja pod workspace/, ne pod wtk22/apps/
  2. .jad datoteka se nahaja v osnovni mapi projekta, ne pod bin/
  3. pod bin/ se nahajajo začasne prevedene .class datoteke

Delo z Eclipse IDE

Odpiranje novega projekta:

  1. File / New / Project

  2. J2ME MIDlet Suite, Next ->

  3. Project Name: Pong, Next ->

  4. Izberi J2ME Wireless Toolkit 2.2 MIDP 1.0 Platform, Next ->

  5. Finish!

Dodajanje .java datotek v src/:

  1. Z desnim kliknemo na src mapo in izberemo New / File
    Vpišemo PongMIDlet.java
  2. V PongMIDlet.java napišemo naš MIDlet class. (public class PongMIDlet extends MIDlet ...)

Osnovne JAD nastavitve (za primer novega Hello World projekta):

  1. Odpremo HelloWorld.jad (odprl se bo JAD editor)

  2. Kliknemo na tab Midlets (spodaj pod editorjem)
  3. Add,

    Vpišemo Name: Hello World
  4. Pod Class izberemo HelloWorldMIDlet

  5. Zapremo JAD, shranimo spremembe in začnemo z razvojem.

Eclipse bliŽnjice

Shift+F2Context sensitive Javadoc api help
Ctrl-SpaceContent Assist, Template completion (npr. sysout -> System.out.println();)
Ctrl-Shift-SpaceParameter Hints
Ctrl-1Quick Fix
Ctrl-Shift-GSearch references (direct usages)
Ctrl-FFind
Ctrl-KFind Next
Ctrl-Shift-KFind Previous
Alt- Left, RightBack, Forward
Ctrl-QBack to last edited
Ctrl-7Comment / Uncomment
Ctrl-MMaximize current view or editor / fullscreen mode
Ctrl-F11Run
F11Debug
Ctrl-.Next Annotation (Error, Warning …)
Ctrl-OIn-place outline
Ctrl-hoverdisplay method content in a hover (glej tudi Window / Show View / Other…Java / Declaration)

Na Nokia emulatorjih je praktično dodati Nokia UI API, da lahko uporabimo FullCanvas, ki običajni Canvas razširi na celoten ekran. To naredimo tako, da namesto iz Canvas razreda naš PongCanvas extend-amo iz FullCanvas razreda.
Dodajanje nokiaui knjižnice projektu

  1. V Project / Properties dobimo nastavitve projekta.

  2. V Build Path moramo dodati pod Libraries knjižnico nokiaui.
  3. Če smo že definirali User Library, kliknemo na Add Library, nato User Library, nato izberemo nokiaui.

  4. Če še nismo, lahko definiramo novo (Add Library - User Library - User Libraries - New) ali pa jo dodamo preko Add External JARs in prebrskamo do nokiaui.zip, ki se običajno nahaja v mapi "\WTK22\wtklib\devices\Series_60_MIDP_Concept_SDK_Beta_0_3_1_Nokia_edition\lib\ext".

Nastavitve runtime konfiguracij

Če želimo zagnati igro v emulatorju, potrebujemo runtime konfiguracijo.

  1. Meni Run / Run ... (oz zelena "play" ikona na toolbar-u) bo viden samo v primeru, da:
    • Imamo odprto vsaj eno .java datoteko (in smo v "Resource" perspektivi)
    • Imamo vklopljeno "perspektivo" Java (perspektive urejamo desno zgoraj)
  2. Izberemo meni Run / Run ... ali kliknemo na puscico dol pri zeleni "play" ikoni:

  3. Na Wireless Toolkit Emulator kliknemo z desnim ter New

  4. Odpre se New_configuration
    1. Namesto "New_configuration" napiši npr. "Simple Pong Nokia 3300"
    2. Če še ni, Pod Project kliknemo Browse in izberemo projekt, npr. Pong
    3. Pod Executable označimo MIDlet, kliknemo Search in izberemo PongMIDlet.
      Na koncu moramo dobiti sliko, podobno tej:

    4. Pri Emulation pod Device izberi npr. Nokia_3300_SDK_1_0

    5. Klikni Apply, in Run. Če je šlo vse po sreči, se nam odpre emulator in naše razvojno okolje je pripravljeno.

Če po kliku na Run dobiš obvestilo, da so v projektu napake, klikni Cancel in odpri pogled Problems (Window / Show View / Problems)

Če je napaka v stilu "error preverifying", potem:

  1. klikni z desnim na projekt SimplePong v Navigatorju in izberi Properties
  2. Pri Builders zamenjaj vrstni red, tako da bo CLDC Preverifier na prvem mestu, kot kaže slika:

  3. Klikni še Project / Clean... ter z desnim na projekt v Navigator oknu in klikni Refresh, napake morajo izginiti.
Napaka je po vsej verjetnosti v zvezi z eclipseME, ki še ni podprt na eclipse, verziji 3.1.0.

Simple Pong

Izvorna koda:

PongMIDlet.java (izvorna datoteka)

PongCanvas.java (izvorna datoteka)

Elementi igre:

Osnovni gradniki game engine-a:

Naloge

Priporočamo reševanj po vrsti, od začetka, možno pa je rešiti poljubno podmnožico nalog, ker so med seboj večinoma neodvisne.

  1. odpri nov Eclipse projekt Pong in poljubno kopiraj kodo iz SimplePong projekta.
  2. dodaj nasprotnikov lopar
    1. implementiraj preprost AI za vodenje nasprotnikovega loparja
    2. dodaj štetje točk
    3. Namesto z drawString nariši točke kot v originalnemu pongu (poišči na google-u, podobne cifre kot na kalkulatorju)
  3. izboljšaj collision handling, npr. odbijanje žogice pod kotom pod določenimi pogoji:
    1. premikanje loparja v trenutku udarca
    2. se je žogica odbila od roba loparja, ali blizu sredine?
  4. dodaj pospeševanje loparja, in vpliv trenutne hitrosti v trenutku udarca na kot odboja žogice
  5. predelaj igro npr. v Arkanoid stil (lopar spodaj, zbijanje opek z žogico).
  6. začni delati svojo igro, razmisli o ideji, in jo "prijavi" pri predavatelju.



Naslednjič bomo začeli z razvojem preprostega space shooter-ja. Od vas se pričakuje, da doma razmislite o ideji, in svoje ideje delite z ostalimi na veliki odprti možganski nevihti, ki jo bomo priredili naslednji teden.

:: Lekcija 01

:: domov :: lekcija 02


game/dev.si :: predlogi ? pišite: Žiga Hajduković