Tečaj
:: 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/.
Č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
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:
MIDlet je podobno, kot applet za web, je aplikacija, napisana za J2ME MIDP.
Dva pojma, ki ju bomo srečevali
http://java.sun.com/products/midp/
http://java.sun.com/products/cldc/
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 (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
Manifest-Version: 1.0 MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 Created-By: 1.4.2_07 (Sun Microsystems Inc.)
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.
Kaj potrebujemo za osnovni razvoj:
Odprimo nov WTK projekt:
Klknemo "New Project..."
Vpišemo ime projekta, npr. "Hello" in pod MIDlet Class Name "HelloWorldMIDlet,".
Kliknemo "Create Project.".
Izberemo MIDP-1.0, da zagotovimo kompatibilnost z MIDP 1.0 napravami.
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.
Poskusimo prevesti projekt. Kliknemo Build.
Poskusimo zagnati MIDlet v emulatorji. Kliknemo "Run" in DefaultColorPhone emulator se bo zagnal.
V emulatorju kliknemo "Launch" da zaženemo naš MIDlet.
Dobimo:
Izvorna koda:
HelloWorldMIDlet.java (izvorna datoteka)
HelloScreen.java (izvorna datoteka)
Primer prikazuje:
Kaj potrebujemo za napredni razvoj:
Poskusimo zagnati Hello World MIDlet v eclipse okolju.
Kako se eclipse J2ME projekt razlikuje od WTK projekta?
Odpiranje novega projekta:
Dodajanje .java datotek v src/:
Osnovne JAD nastavitve (za primer novega Hello World projekta):
Eclipse bliŽnjice
| Shift+F2 | Context sensitive Javadoc api help |
| Ctrl-Space | Content Assist, Template completion (npr. sysout -> System.out.println();) |
| Ctrl-Shift-Space | Parameter Hints |
| Ctrl-1 | Quick Fix |
| Ctrl-Shift-G | Search references (direct usages) |
| Ctrl-F | Find |
| Ctrl-K | Find Next |
| Ctrl-Shift-K | Find Previous |
| Alt- Left, Right | Back, Forward |
| Ctrl-Q | Back to last edited |
| Ctrl-7 | Comment / Uncomment |
| Ctrl-M | Maximize current view or editor / fullscreen mode |
| Ctrl-F11 | Run |
| F11 | Debug |
| Ctrl-. | Next Annotation (Error, Warning …) |
| Ctrl-O | In-place outline |
| Ctrl-hover | display 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
Nastavitve runtime konfiguracij
Če želimo zagnati igro v emulatorju, potrebujemo runtime konfiguracijo.
Č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:
Izvorna koda:
PongMIDlet.java (izvorna datoteka)
PongCanvas.java (izvorna datoteka)
Elementi igre:
Osnovni gradniki game engine-a:
Thread myThread = new Thread(pongCanvas); myThread.start();
public void run()
{
while(pongRunning)
{
// premikaj zogico
// premikaj lopar glede na uporabnikov vnos
// preveri, ce se mora zogica odbiti od stene
// preveri, ce se mora zogica odbiti od loparja
}
}
public void paint(Graphics g)
{
// narisi zogico
// narisi lopar
}
public void keyPressed(int key)
{
// preveri pritisk tipke (key / getGameAction(key))
// glede na vnos aktiviraj premikanje loparja
}
public void keyReleased(int key)
{
// preveri spust tipke (key / getGameAction(key))
// glede na vnos deaktiviraj premikanje loparja
}
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.
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ć |