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 06 |
lekcija 05 :: domov |
Epsilon 05 eclipse workspace project (sfx)
Odpri povezavo:
http://www.tetris1d.org/gdwap/na svojem mobilnem telefonu in si naloži Epsilon_05.
GameCanvas.java (izvorna datoteka)
GameSprite.java (izvorna datoteka)
Datoteka stage1.txt:
public static final byte SPRITE_ID_PLAYER = 0; // 'P'
public static final byte SPRITE_ID_ENEMY1_SHOOTING = 1; // 'A'
public static final byte SPRITE_ID_ENEMY1 = 2; // 'a'
public static final byte SPRITE_ID_ENEMY2_SHOOTING = 3; // 'V'
public static final byte SPRITE_ID_ENEMY2 = 4; // 'v'
public static final byte SPRITE_ID_ENEMY3 = 5; // 'O'
public static final byte SPRITE_ID_ENEMY3_SINUS = 6; // 's'
public static final byte SPRITE_ID_ENEMY3_SINUS_SHOOTING = 7; // 'S'
public static final byte SPRITE_ID_ENEMY4_SHOOTING = 8; // 'T'
public static final byte SPRITE_ID_BOSS1 = 9; // 'B'
public static final byte SPRITE_ID_BOSS2 = 10; // 'C'
OOOOOOOOOOOOOOOO; ;
OOvvvvvvvvvvvvOO; ;
O/ \O; ;
> <; B ;
> <; ;
> <; ;
> <; ;
> <; ;
OL JO; ;
OGL JGO; ;
OOGL JGOO; V V ;
\OOGL JGOO/; ;
\OG/ \GO/ ; ;
\/ \/ ; ;
; ;
JL ; A A ;
JOOL ; ;
L <OOG ; O O O ;
> <GG> J; ;
/ <OO> <; ;
GOO> \; ;
\GG/ ; V V ;
\/ ; ;
J; ;
J^^L JO; ;
JOvvOL \O; ;
JG/ O> \; A A ;
<> J>/ J; A A ;
J/ <G JO; ;
J> JO/ JOG; ;
J/ JO/ JOGO; ;
GO^^^/ OOOG; ;
GOGG/ OOGO; ;
OGOO OGOO; O O ;
vvvv Ovvv; ;
; ;
JL JL ; V V ;
JOOL JOOL ; ;
JOOGO OGOOL; ;
OOGO> <OGOO; O O ;
\GOGO OGOG/; ;
OOO> <OOO ; O O ;
vvvv vvvv ; ;
OOOO OOOO ; O O ;
\vv/ \vv/ ; ;
; O O ;
L J; ;
> <O; ;
/ \; ;
; a a ;
JL ; ;
JOOL ; ;
L <OOG ; v v ;
> <GG> J; v v ;
/ <OO> <; v v ;
GOO> \; ;
\GG/ ; ;
\/ ; ;
J; ;
J^^L JO; ;
JOOOOL \O; ;
JOOGOO> \; ;
<OOOGO/ J; P ;
JOOOOG JO; ;
Datoteka stage2.txt:
J^L J^L ; ;
<G> <G> ; T T ;
\v/ \v/ ; C ;
; ;
J^L J^L ; ;
<G> <G> ; T T ;
\v/ \v/ ; ;
; s ;
; S S ;
J^L ; s ;
JOGOL ; S T S ;
^^OGOGO^^ ; T T ;
GO> <OG ; T T ;
\OO^^^OO/ ; ;
\vOGOv/ ; A T A ;
\v/ ; ;
; S S S ;
; ;
; ;
; ;
; v v ;
J^L J^L ; ;
^^OGO^^^^^OGO^^^; T T ;
vvvvvvOGOvvvvvvv; T ;
\v/ ; ;
; S S ;
; s s ;
J^L ; S ;
<G> ; T ;
\v/ J^L ; ;
<O> ; s ;
\v/ ; ;
; s s ;
J^L ; ;
<O> ; ;
\v/ J^L ; ;
<G> ; T ;
\v/ ; ;
; V V V V ;
; ;
JL ; ;
^^^^^^^GG^^^^^^^; TT ;
vvvGGvvvvvvGGvvv; TT TT ;
\/ \/ ; ;
; a a ;
; ;
; a a ;
; S S ;
; ;
^^^L J^^^; ;
OOG> <GOO; T T ;
vvv/ \vvv; ;
; s s ;
; ;
J^L ; ;
OGO ; T ;
\v/ ; ;
; ;
; ;
J^L ; ;
<O> ; ;
\v/ ; P ;
; ;
Boss2 se spusti po vertikali proti igralcu, če se po horizontali tudi premika proti njemu. V horizontalni smeri je namreč še vedno predvidljiv. Boss2 se dvigne po vertikali, če se po horizontali premika stran od igralca.
Boss2 ima poseben paintSprite(), ki nariše krila pod trupom, upošteva pa tudi trenutno odprtost kril.
Vsakih x sekund ustreli v smeri igralca.
Vsakih x sekund se odpre, iz stranskih topov izstreli nekaj metkov naravnost dol.
Boss2 je neranljiv medtem ko je zaprt.
Dodali smo ikono, v velikosti 24x24, primerni za uporabo na S60 Nokia telefonih. Ikona doda občutek o dovršenosti igre in zato ni zanemarljiva lastnost igre.
Ikona je preprosto png slika pravih dimenzij, dodana v .jar datoteko. Poleg tega mora .jad obvezno vsebovati povezavo do datoteke z ikono v atributih MIDlet-xxx in pa MIDlet-Icon.
Vredno se je poglobiti v forma zapisa PNG slik in dodatno optimizirati velikost le teh. PNG je zasnovan dokaj modularno, zato je tipična .png datoteka sestavljena iz kosov (chunks). Vsak .png vsebuje npr. kose HDR, IDAT (bolj ali manj bitna slika), PLTE (paleta) in še nekatere manjše. Na hitro lahko dobimo idejo, da bi kose hranili posebej in jih sestavljali pri nalaganju npr. posameznih stopenj v igri. Tako lahko naložimo poljubno kombinacijo npr. palet in bitne slike, kar pri izključno barvnih različicah slik lahko prinese velike prihranke.
Precej pomembno je, da je igra prilagodljiva za razlićne jezike. POnavadi dosežemo lokalizacijo zelo preprosto s hranitvijo string-ov v posebni zunanji datoteki, ki jo dodamo v .jar. Ta datoteka ima po določeni vrsti zapisane vse string-e iz igre, vsakemu string-u pa dodelimo svoj ID, preko katerega jih nalagamo v samo igro. Na tak način preprosto zamenjamo to zunanjo datoteko, in dobimo drugo jezikovno različico.
Dodatno pa je potrebno pri lokalizaciji paziti tudi na druge stvari. Predvsem je velik problem upoštevanje dolžine besed v drugih jezikih, še posebej je glede tega problematičen nemški jezik. Včasih hočemo npr. lokalizirati tudi morebitne denarne enote pa tudi druge kulturne posebnosti. Pri azijskih jezikih lahko naletimo tudi na problem deljenja besed.
Da se izognemo množiči različic, prilagojenih npr. za različne ekrane in morda kode softkey-ev, lahko uporabimo preprocessor kode. Podobno kot je v jezik c že vgrajeno tudi tukaj poteka preprocesiranje s pomočjo ukazov:
//#define //#ifdef ali //#ifndef //#else //#endifin podobnimi. Več o tem na Antenna preprocessing.
Antenna v kombinaciji z ant build skriptami se izkaže za zelo uporabno pri hkratnem build-anju večih različic.
Predvsem je omembe vreden 3d API, ki je po eni strani tudi velik marketinški hit, po drugi strani pa še ne preveč razširjen. Potrebno je razmisliti o uporabnosti in gameplay vrednosti 3d api-ja. Verjetno ne bo vsaka 3d PC igra primerna za predelavo za male ekrane.
Bolj razširjen je MIDP 2.0 Game API, ki nekako izhaja iz Nokia UI API-ja, s katerim deli precej podobnosti. Oba omogočata direkten dostop do bitne slike Image objektov, kar je poglavitna prednost v primerjavi z MIDP 1.0. Game API vsebuje tudi "native" podporo za Game Sprite-e, s čimer privarčujemo na velikosti kode, vprašanje je, koliko privarčujemo na hitrosti.
Na pohodu je že tudi Bluetooth API, žal še v zelo v povojih, implementacije so večinoma polne hroščev, kar onemogoča normalen razvoj. V upanju na izboljšanje..
Predvsem nekatere Nokie (preko Nokia UI API-ja) omogočajo tudi uporabo vibre (force feedback :) ) ter kontrolo nad osvetlitvijo ekrana. MIDP 2.0 specifikacija vključuje te funkcije.
| game/dev.si | :: predlogi ? pišite: Žiga Hajduković |