You are on page 1of 96

Framework for mobile game development

Nguyn Vn Bnh 20090243


Dng Vn Sinh 20092219 1




TRNG I HC BCH KHOA H NI
VIN IN T VIN THNG




N TT NGHIP

TI:
FRAMEWORK FOR MOBILE GAME DEVELOPMENT


Gio vin hng dn : Th.S V Song Tng
Sinh vin thc tp : Nguyn Vn Bnh
: Dng Vn Sinh


H Ni: 6 -2014
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 2

B GIO DC V O TO CNG HA X HI CH NGHA VIT NAM
TRNG I HC BCH KHOA H NI
--------------------------------------------------
c lp - T do - Hnh phc
---------------------------------

NHIM V N TT NGHIP

H v tn sinh vin: ..... S hiu sinh vin: .
Kho:.Khoa: in t - Vin thng Ngnh: ...........................................
1. u n:
..
.
2. Cc s liu v d liu ban u:
......
.
.....
3. Ni dung cc phn thuyt minh v tnh ton:
..
.
.....
.....
4. Cc bn v, th ( ghi r cc loi v kch thc bn v ):

...
...
5. H tn ging vin hng dn: ...
6. Ngy giao nhim v n: ..
7. Ngy hon thnh n: ....
Ngy thng nm
Ch nhim B mn Ging vin hng dn





Sinh vin hon thnh v np n tt nghip ngy thng nm
Cn b phn bin
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 3

B GIO DC V O TO
TRNG I HC BCH KHOA H NI
---------------------------------------------------

BN NHN XT N TT NGHIP

H v tn sinh vin: .................................................................... S hiu sinh
vin: ...........................
Ngnh: ................................................................................
Kho: ....................................................
Ging vin hng dn:........................................................................................................................
Cn b phn
bin: ...............................................................................................................................
1. Ni dung thit k tt nghip:
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
2. Nhn xt ca cn b phn bin:
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................
............................................................................................................................................................

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 4

Ngy thng nm
Cn b phn bin
( K, ghi r h v tn )
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 5

LI NI U
Vi s pht trin nhanh chng ca in thoi lm cho th trng game in thoi
ngy cng a dng v hp dn hn bao gi ht. c bit game android v h iu hnh
android l mt h iu hnh m cho php nhng nh lp trnh ty sng to ng thi n
cng l h iu hnh chim th phn ln nht trn th gii. Chnh v vy nn mt t
nc cn nhiu kh khn nh nc ta cng vi nhng kin thc m c chia s t do
trn mng th y chnh l c hi cho nhng nh lp trnh t do ca ta c quyn m mt
gic m gin d l t do sng to am m m vn kim c tin trang tri cuc sng,
thm ch mt gic m xa hn l game ca mnh vit ra c th ch ng th trng nc
ngoi khng nh trnh ca cc lp trnh vin Vit Nam khng h thua km cc lp
trnh vin nc ngoi. T cc ng ln nh Google c ci nhn khc v chng ta nhm
g b cc ro cn trong vic kim tin bng vic bn game trn Google Store. Tuy nhin
c hi lun i i vi kh khn thch thc, Vit Nam game by gi ging nh mt
ng hn n, cc cng ty ln c tin th ua nhau v ha, hnh nh hay cc nht vt
hm h, sexy mt cch l bch. Mt khc cc nh lp trnh t do th trnh lp trnh cn
hn ch c th l do cc engine hin nay cn t ti liu hay qu phc tp nn to ra
nhng sn phm khng n nh, khng mang tnh hng ti ngi dng m ch n gin
l vit xong vt ln Google Store ri cu cho ai ti xung ri kch v qung co c
tin hay t hn l cp tin ca ngi dng bng cch t ng nhn tin n s tng i.
T chng ta c th thy rng c hai vn chnh th trng game ca ta l ngi
c tin th khng thm u t ni dung, k nghip d th vit game ra ch cu may c
tin. Vn n gin i vi nhng cng ty c tin h ch cn u t nhn s v thit k
l hon ton c nhiu c hi kim c nhiu li nhun nhng i vi nhng nh lp
trnh t do mi chp chng vo ngh th c c hi no cho h ngh v mt tng lai sng
hn nh Nguyn H ng tng lm c vi Flappy Bird mt game c ct truyn
n gin nhng y tnh hp dn v kh ca n cho d ha ca n rt n gin.
Khng cn cch no khc l nhng ngi bc vo con ng vit game ny v coi n
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 6

nh cn cu cm phi hc hi v nm vng t nht mt ngn ng thng tho t nht mt
engine game. Tuy nhin do s hn ch v mt ting anh ca a phn lp trnh vin hin
nay th vic nghin cu mt engine gp khng t kh khn thm ch a phn nhng
engine game hin nay u rt phc tp hoc mt ph cng lm cho mi th kh khn hn.
gii quyt vn trong n ny chng ti quyt nh vit mt engine game
vi nhng thnh phn c bn gip nhng ngi lp trnh c th nhanh chng nm bt
c kin trc, quy trnh ca vic lm game ng thi cng nhanh chng xy dng c
nhng game n gin ha kh v nh nhng vi in thoi.
Trong qu trnh thc hin n vit engine game ny chng ti nhn c rt
nhiu s gip t cc thy c trong vin in T Vin Thng, c bit phi k n s
tn tm nhit tnh ca Th.S. V Song Tng ngi trc tip hng dn chng ti
hon thnh n ny. Chng ti xin gi li cm n chn thnh nht n Thy cng nh
thy c trong Vin in T Vin Thng.


Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 7

TM TT N
Vi vic pht trin ngy cng nhanh ca th trng game Vit Nam th cc lp trnh
vin ngy cng c nhu cu tip cn cng c vit game mt cch nhanh chng v n gin
nht. Cng c vit game y a phn l cc engine game n l nn tng cc nh
lp trnh da vo xy dng game cho mnh. Tuy nhin hin nay cc engine game
ch yu cn phc tp ti liu t m vit ch yu bng ting anh. iu khin cho cc
lp trnh vin Vit Nam gp rt nhiu kh khn trong vic tip cn cng ngh.
Chnh v vy n ny ca chng em nhm mc ch vit ra mt engine game c bn
y cc thnh phn gip cc lp trnh vin c th tip cn vi kin trc v cch thc
hot ng ca engine game t nm bt v ti u c game mnh vit ra. Ngoi ra
v mt kinh t da trn engine game ny hon ton c th to ra cc game c ha n
gin ni dung hp dn a ln Google Play.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 8

ABSTRACT

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 9

MC LC

LI NI U .................................................................................................................... 5
TM TT N ............................................................................................................. 7
ABSTRACT ....................................................................................................................... 8
MC LC .......................................................................................................................... 9
DANH SCH HNH V ............................................................................................... 110
DANH SCH CC T VIT TT ............................................................................... 13
PHN M U .............................................................................................................. 14
CHNG I. C S L THUYT ............................................................................... 15
1.1 Kin trc nn tng Android .............................................................................. 15
1.1.1 Kin trc tng qut ............................................................................................ 15
1.1.2 Linux Kenel ........................................................................................................ 16
1.1.3 Libraries .............................................................................................................. 16
1.1.4 Application Framework .................................................................................... 19
1.1.5 Applications ........................................................................................................ 20
1.2 Tng quan v cc thnh phn ca framework ................................................ 20
1.2.1 ng dng v qun l ca s (Application and window management) .............. 21
1.2.2 u vo (Input) ....................................................................................................... 21
1.2.3 Vo ra file (File I/O) ............................................................................................... 23
1.2.4 m thanh (Audio) ................................................................................................... 24
1.2.5 ha ...................................................................................................................... 25
1.2.6 Game Framework ................................................................................................... 29
1.3 Android cho pht trin game ............................................................................ 30
1.3.1 Vng i Activity ............................................................................................... 30
1.3.2 X l u vo ...................................................................................................... 33
1.3.3 X l File ............................................................................................................. 38
1.3.4 X l m thanh ................................................................................................... 40
1.3.5 API Android h tr lp trnh ha .................................................................... 44
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 10

CHNG II. XY DNG FRAMEWORK ................................................................ 61
2.1 Vo ra file ............................................................................................................ 61
Hnh 2.1 S lp m-un vo ra file .............................................................................. 63
2.2 Input .................................................................................................................... 63
2.2.1 Cm bin gia tc ................................................................................................. 63
2.2.2 Lp Pool .............................................................................................................. 64
2.2.3 X l s kin t bn phm ................................................................................. 65
2.2.4 X l chm .......................................................................................................... 67
2.2.5 AndroidInput ...................................................................................................... 69
2.3 M-un m thanh (Audio)..................................................................................... 71
2.4 M-un ha ........................................................................................................ 73
2.5 Game Framework .................................................................................................. 78
2.5.1 Xy dng phn giao din ................................................................................... 79
2.5.2 Thc thi giao din Game v lp tru tng Screen ....................................... 79
2.6 Hon thin Framework ..................................................................................... 82
2.6.1 Cc loi i tng v kim tra va chm trong Game ......................................... 83
2.6.2 Ti u b nh ..................................................................................................... 87
CHNG III. S DNG FRAMEWORK .................................................................. 88
KT LUN ...................................................................................................................... 94
TI LIU THAM KHO ............................................................................................... 95


Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 11

DANH SCH HNH V
Hnh 1.1 Kin trc Android [1] ......................................................................................... 15
Hnh 1.2 Nhn Linux trn Android [1] .............................................................................. 16
Hnh 1.3 H thng th vin Android [1] ........................................................................... 16
Hnh 1.4 Cc thnh phn khung ng dng ca Android [1] ............................................ 19
Hnh 1.5 Cc thnh phn ng dng ca Android [1] ....................................................... 20
Hnh 1.6 Cc trc gia tc trn in thoi Android [15] ................................................... 23
Hnh 1.7 Li hin th v VRAM [15] ............................................................................... 26
Hnh 1.8 V d v trn mu (Blending)[15] ...................................................................... 28
Hnh 1.10 [15] ................................................................................................................... 45
Hnh 1.9 Vng i Android [1] ......................................................................................... 32
Hnh 1.11 Php chiu song song ( bn phi) v php chiu phi cnh ( bn tri)[15] .... 46
Hnh 1.12 Mt ct gn v h ta [15] .......................................................................... 47
Hnh 1.13 Cc bc v mt tam gic ................................................................................ 48
Hnh 1.14 [15] ................................................................................................................... 50
Hnh 1.15 Gc nhn ct ngang trong khng gian 2D qua php chiu song song [15] .... 51
Hnh 1.16 H ta kt cu (texture coordinates) [15] ................................................... 52
Hnh 1.17 Gn to kt cu cho nh bitmap [15] .......................................................... 53
Hnh 1.18 S dng li nh [15]........................................................................................ 56
Hnh 1.19 Cc mu trong OpenGL ES [15] ...................................................................... 57
Hnh 1.20 H ta world space [15] ......................................................................... 58
Hnh 1.22 Quay mu 45 [15] ....................................................................................... 59
Hnh 1.23 Mu c dn 2 ln theo trc x v co mt na theo trc y [15] ..................... 60
Hnh 2.2 S lp m-un input ...................................................................................... 71
Hnh 2.3 S lp m-un m thanh................................................................................ 72
Hnh 2.4 S lp m-un ha.................................................................................... 74
Hnh 2.5 nh bitmap font .................................................................................................. 78
Hnh 2.6 Thc th giao din Game v lp Screen ............................................................. 80
Hnh 2.7 Cc loi i tng v kim tra va chm trong Game ........................................ 83
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 12

Hnh 2.8 Va chm gia 2 hnh trn [15] ........................................................................... 84
Hnh 2.9 Va chm gia hai hnh ch nht [15] ................................................................ 84
Hnh 2.10 Va chm gia hnh trn v hnh ch nht [15] ................................................ 85
Hnh 2.11 Kim tra im nm trong tam gic [15] ........................................................... 85
Hnh 2.12 Kim tra va chm gia hnh trn v cnh tam gic [15] ................................. 86
Hnh 2.13 S lp tng quan ca Framework ............................................................... 87
Hnh 3.1 Texture (bn tri) v Texture Region (bn phi) ............................................... 89
Hnh 3.1 Minh ha cnh trong Game ................................................................................ 92
Hnh 3.2 Va chm ca i tng trong Game .................................................................. 93

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 13

DANH SCH CC T VIT TT

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 14

PHN M U
Trong vi nm gn y nh s pht trin mnh m cng dng in thoi thng minh
cng nh s pht trin khng ngng ca h iu hnh Android m ngun m lm cho th
trng game trn in thoi tr nn tim nng hn bao gi ht. Trong khi th gii vi nn
tng pht trin h iu hnh v game t lu h hon ton c th nm bt v pht trin
nhanh chng game a ra th trng th Vit Nam ang l mt nc mi ni mi chp
chng vn ra th gii cn gp rt nhiu kh khn c bit l vic tip cn cng ngh v
vn ting anh ngi Vit khng kh m cc cng ngh v game hay cc engine game kh
phc tp.
Mt khc nu lm game theo kiu n xi th cng kh theo kp cc nc pht trin
game khc nn iu quan trng l chng ta phi nm c nhng im ct li hay nhng
nn tng v engine game. N l ci xng sng xy dng game, nm bt c n
chng ta hon ton c th pht trin game lu di m khng tht hu v mt cng ngh.
Tuy nhin mt s kh khn nh nu trn s lm chng ta kh tip cn cng ngh nn
chng ti xy dng n ny gip cho cc lp trnh vin mi chp chng vo ngh
c th nm bt c nhng im c bn v cu trc h tng v thng tng trong vic
xy dng game. l mc ch v mt cng ngh ca n ngoi ra v mt kinh t bn
hon ton c th da trn engine c bn ca chng ti xy dng nhng game c ha
khng ti cht no. Nu bn chu kh u t vo ni dung ct truyn th hon ton bn
c th chinh phc ngi chi nh Nguyn H ng lm c.
Trong phm vi n ny chng ti s trnh by lm 4 chng:

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 15

CHNG I. C S L THUYT
1.1 Kin trc nn tng Android
1.1.1 Kin trc tng qut


Hnh 1.1 Kin trc Android [1]

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 16


Nh trn hnh Android gm 4 thnh phn
Linux Kernel
Libraries
Application Framework
Applications
1.1.2 Linux Kenel


Hnh 1.2 Nhn Linux trn Android [1]
Android s dng nhn Linux 2.6 lm nhn cho cc dch v h thng nh bo mt,
qun l b nh, qun l tin trnh (x l tin trnh, a lung), ngn xp mng v trnh
iu khin thit b (giao tip USB, giao tip hng ngoi, khng y, v.v). Nhn Linux
ny cng c vai tr nh mt lp tru tng gia phn cng v phn mm.
1.1.3 Libraries
Android c mt th vin kh phong ph [9] cung cp sn ngi lp trnh c th s
dng. Hnh 4 l s tm tt v h thng th vin ny.

Hnh 1.3 H thng th vin Android [1]
Android runtime
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 17

Android c mt tp cc th vin nng ct cung cp hu ht cc chc nng sn c
trong th vin ct li ca ngn ng lp trnh Java. Android Runtime: Bao gm my o
Dalvik v cc th vin Android
Cc th vin c bn: Cc ng dng Android c pht trin trn mi trng Java,
nhng Dalvik li khng phi l mt Java VM. Cc th vin c bn ca Android cung cp
hu ht cc chc nng c trong th vin c bn ca Java cng nh l th vin ring ca
Android.
My o Dalvik: Dalvik l my o chy cc ng dng trn Android, c ti u
m bo rng mt thit b c th chy c nhiu Instance mt cch hiu qu. N da
vo nhn Linux thc hin a lung v qun l b nh cp thp.
Core libraries
Android cung cp mt s cc APIs cho pht trin ng dng. Danh sch cc API c
bn sau c cung cp bi tt c cc thit b trn nn Android:
- android.util: Gi tin ch c bn bao gm nhiu lp mc thp nh l cc lp qun l
(List, Stack) lp x l chui, lp x l XML
- android.os Gi h iu hnh cung cp truy cp n cc dch v c bn nh l chuyn
tin nhn, thng tin cho, ng h v g li.
- android.graphics Cung cp cc lp ha mc thp thc hin cc chc nng ha,
mu, v c bn.
- android.text Cng c hin th v x l vn bn
- android.database Cung cp cc lp mc tht bt buc cho vic iu khin cursor khi
lm vic vi cc c s d liu
- android.content Cc giao tip lp trnh ni dung c dng qun l truy cp d
liu v xut bn bng cch cung cp cc dch v thao tc vi ti nguyn, Content
Provider, v cc gi
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 18

- android.view View l lp giao din ngi dng c bn nht. Tt c giao din ngi
dng c to ra u phi s dng mt tp cc View cung cp cho cc thnh phn
tng tc ngi dng.
- android.widget Xy dng da trn gi View. Nhng lp Widget nhng thnh phn
giao din c to sn c s dng to nn giao din ngi dng. Cc Widget bao
gm danh sch, nt bm, hp nhp, cc kiu trnh by(layout)
- com.google.android.maps b API mc cao cung cp truy cp n iu khin bn
sn trong Androif t ng dng c xy dng. Bao gm c lp MapView cng nh
Overlay v MapController tng tc vi bn bn trong ng dng.
- android.app Mt gi th vin bc cao, cung cp truy cp n d liu ca ng dng.
Gi ng dng cng bao gm lp Activity v Service l thnh phn c bn ca mi ng
dng Android.
- Android.provider to thun li cho ngi pht trin truy cp n cc Content
Provider tiu chun(nh l d liu danh b), gi Cung cp(Provider) bao gm cc lp cho
php truy cp n c s d liu chun trong tt c cc bn phn phi Android.
- Android.telephony Cc API in m cung cp kh nng tng tc trc tip vi tng
in thoi trong cc thit b, cho php to, nhn, theo di cc cuc gi, tnh trng cc
cuc gi v tin nhn SMS.
- android.webkit Gi WebKit cung cp cc API lm vic vi cc ni dung Web-
based bao gm mt lp WebView to ra giao din web, nhng trong ng dng v mt
trnh qun l cookie.
Cng vi cc API ca Android, cn c mt tp cc th vin C/C++ nh:
- OpenGL Th vin dng to ra cc ha 3D da vo chun OpenGLES 1.0 API
- FreeType H tr x l bitmap v font vector
- GGL Th vin c bn, dng cung cp cc engine ha 2D
- Libc Th vin C chun, c ti u cho cc thit b Linux-based
- SQLite Engine c s d liu quan h gn nh, dng lu tr d liu ca ng dng
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 19

- SSL H tr s dng giao thc m ha Secure Sockets Layer trong bo mt truyn
thng Internet
Ngoi cc th vin chun ca Android, p ng tiu ch ph hp vi nhiu thit b
khc nhau, Android cn c th c cc API ph thuc thit b nh android.location,
android.media, android.opengl, android.hardware, android.bluetooth, android.net.wifi, v
android.telephony.
1.1.4 Application Framework

Hnh 1.4 Cc thnh phn khung ng dng ca Android [1]
Kin trc ca Android khuyn khch khi nim Thnh phn s dng li, cho php
cng b v chia s cc Activity, Service, d liu, vi cc ng dng khc vi quyn truy
cp c qun l bi khai bo.
C ch cho php ngi lp trnh to ra mt trnh qun l danh b hoc trnh quay
s in thoi m c cc thnh phn ngi khc c th to mi giao din v m rng chc
nng thay v to li chng.
Nhng dch v sau l nhng dch v kin trc c bn nht ca tt c cc ng dng,
cung cp mt framework cho mi mi phn mm c xy dng:
- Actitvity Manager: iu khin vng i ca cc Activity bao gm c qun l cc
tng Activity.
- Views: c s dng to lp cc giao din ngi dng cho cc Activity
- Notification Mamager: Cung cp mt c ch c nh v quy c cho vic gi cc
thng bo n ngi dng.
- Content Provider: Cho php ng dng chia s d liu gia cc ng dng.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 20

- Resource Manager: H tr cc thnh phn khng thuc m ngun nh l chui k
t, ha c t bn ngoi.
1.1.5 Applications

Hnh 1.5 Cc thnh phn ng dng ca Android [1]
y l lp trn cng ca kin trc nn tng Android. Android s hot ng vi mt b
cc ng dng bao gm ng dng th in t, gi tin nhn, lch, bn , trnh duyt web,
danh b v.v Tt c cc ng dng c vit bng ngn ng Java. Cc ng dng ny c
th c cung cp sn hoc c pht trin bi nhng lp trnh vin.
1.2 Tng quan v cc thnh phn ca framework
Phn ny ca n s trnh by tng quan v cc thnh phn thng dng to nn
Game. Cc thnh phn thng c xy dng di dng cc giao din v c thc hin
sau vi cc nn tng c bn m Android cung cp. Giao din s cho php chng ta tp
trung vo ng ngha m khng cn bit chi tit phn thc hin, ng ngha chng ta c
th thay i phn thc hin sau ny.
Mi Game cn dng mt framework gim thiu vic giao tip vi h iu hnh bn
di khi lp trnh. Mt framework c bn thng chia thnh cc m-un nh di y:
o ng dng v qun l ca s (Application and window management) : c nhim v
to ra mt ca s v thc hin vic ng ca s hay dng / tip tc cc ng dng Android
o u vo (Input) : lin quan ti m-un qun l ca s, n theo di cc u vo t
ngi dng ( nh s kin chm, nhn bn phm, c b o gia tc)
o Vo ra File (File I/O) : cho php ly cc byte ti nguyn cho chng trnh t a
o ha (Graphics) : y l m-un phc tp nht,n chu trch nhim ti ti
nguyn ha v v ln mn hnh
o m thanh (Audio) : chu trch nhim ti v chi cc ti nguyn m thanh
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 21

Tp hp cc thnh phn trn li to thnh mt Game Framework, gip cho vit game
tr nn d dng hn.
Mi thnh phn bao gm mt hay nhiu giao din. Mi giao din s c t nht mt
thc hin c th da trn nn tng c bn Android cung cp. Sau y chng ta s i c
th hn vo cc thnh phn trn
1.2.1 ng dng v qun l ca s (Application and window management)
Mt game cng nh mt chng trnh my tnh im c mt giao din ngi dng
(UI). N c cha trong ca s. Ca c ging nh mt thng cha, hay n gin l ni
v ln ni dung ca game. H iu hnh cho php ngi dng tng tc vi ca s
theo nhiu cch, nh chm vo mn hnh hay nhn cc phm.
M-un chu trch nhim thit lp ca s v m bo n c in y bi thnh
phn giao din ngi dng (UI) duy nht, hay l ni v ln v nhn cc tng tc t
ngi dng. Thnh phn giao din ngi dng (UI) c th c render qua CPU hay c
th l qua phn cng c tng tc trong trng hp s dng OpenGL ES.
1.2.2 u vo (Input)
Ngi dng s tng tc vi ca s bng mt cch no , sau ca s s gi s
kin n thnh phn giao din ang c hin th. V iu cn quan tm l lm th
no ly c s kin t thnh phn giao din ngi dng . Cc API giao din ngi
dng ca h iu hnh cung cp mt c cu mc vo h thng gi s kin, do d
dng ghi li s kin.
C hai c ch x l cc thng tin s kin c ghi li :
o Polling (thm d) : ch kim tra trng thi hin ti ca u vo, mi trng thi gia
ln kim tra hin ti v ln kim tra cui u b mt. Cch x l u vo ny ch thch
hp cho vic kim tra nhng th nh xem ngi dng chm vo mt nt c th, khng
thch hp co vic theo di nhp vn bn.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 22

o Da trn x l s kin: cung cp y thi gian ca cc s kin xy ra t ln
kim tra cui cng. y l mt c ch thch hp thc hin nhp vn bn hay nhng
bt k cng vic da trn th t ca s kin. N cng hu ch pht hin khi mt ngn
tay chm vo mn hnh hoc khi ngn tay c nhc ln.
Trong Android c ba phng thc vo l : chm mn hnh, nhn phm, v o gia tc.
Hai phng thc u dng c hai c ch x l trn, cn o gia tc ch dng c ch
Polling
Phng thc chm mn hnh chia lm 3 kiu s kin:
o S kin chm xung : xy ra khi ngn tay chm mn hnh
o S kin ko : xy ra khi ngn tay ko trn mn hnh, xy ra sau s kin chm
xung
o S kin nhc ln : xy ra khi ngn tay nhc ln khi mn hnh
Mi s kin chm mn hnh c thm hai thng tin l : v tr tng i so vi gc, v
ch s con tr dng trong trng hp cm ng a im phn bit v theo di cc ngn
tay ring bit.
Nhn phm c chia lm hai loi s kin
o Nhn xung : khi phm c n xung
o Nhc ln : xy ra khi mt phm c nhc ln
Cc s kin vi phm cng c thm cc thng tin, s kin nhn s lu mt m ca
phm nhn, s kin nhc ln lu mt m phm v mt k t Unicode . s khc nhau gia
m phm v k t Unicode c to ra t s kin nhc phm. Trng thi ca cc phm
khc cng c lu li, chng hn nh phm Shift, bng cch ny ta c th nhn ra ch
hoa v ch thng trong s kin nhc phm. Cn trong s kin nhn xung ta ch bit
phm no c nhn m khng bit k t m phm c nhn to ra.
B o gia tc : dng b o gia tc, ta s lun lun thm d trng thi ca b o.
N s bo co gia tc di tc dng ca lc ht Tri t trn mt trong ba trc c gi
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 23

l x,y,z. Trong vt l mt i tng c gia tc 9.8 m/s
2
khi ri t do trong Tri t. Khi
mt trc hng v pha tm Tri t, gia tc cc i s c p dng cho n, v d khi
gi my thng ch chn dung, trc y s c gia tc 9.8 m/s
2
. trong hnh di trc z s
c gia tc l 9.8 m/s
2
, cn trc y v x c gia tc l 0.

Hnh 1.6 Cc trc gia tc trn in thoi Android [15]
1.2.3 Vo ra file (File I/O)
c v ghi file kh cn thit cho pht trin game. Trong Java , iu quan tm nht l
to ra cc th hin InputStream v OutputStream, nhn c cu chun ca Java c v
ghi file c th. Trong pht trin game, iu c quan tm nht l c nhng file c
ng gi cng game, nh file cp (level), hnh nh, m thanh, cn ghi file c dng
t thng xuyn hn, ch yu dng ghi file khi mun lu li im cao hay thit lp game
hay trng thi ca game.
Cc file s c c t file APK ca game (trng hp file c ng gi theo game)
hoc c t SD card ( cc file c ghi vo SD card)
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 24

1.2.4 m thanh (Audio)
Lp trnh m thanh kh phc tp nhng i vi m thanh trong game ta khng i su
vo x l m thanh, ch bao gm chi v pht li cc m thanh hiu ng v nhc c ti
t cc file m thanh.
Tnh cht vt l ca m thanh : m thanh c m hnh ha nh tp hp cc sng
di chuyn trong mi trng nh nc hay khng kh. Cc sng khng phi cc i tng
vt l thc t nhng l s vn ng ca cc phn t trong mi trng. Khi 1 m thanh
c to ra, s c cc chuyn ng cu. Tt c cc sng m thanh trong mt mi trng
tp hp li thnh cc giai iu. m ng ca m thanh c quyt nh bi bao nhiu
nng lng c vn chuyn v s suy hao khi tc ng ln cc phn t k tip cho n
khi ti tai ngi nghe.

Ghi m v pht m thanh : m thanh s c ghi li di dng s, trng thi ca
mng loa c o lu tr ti cc bc thi gian ri rc. qu trnh ny gi l ly mu,
lng mu trong 1 n v thi gian gi l t l ly mu, nu n v thi gian l giy (s) t
l ly mu c n v l Hz. T l ly mu cng cao th cht lng m thanh cng cao.
Ngoi ra cch thc lu cc mu trng thi cng ng vai tr quan trng trong cht lng
m thanh. Vi mt mng loa ta s ghi c m thanh mono, vi hai mng loa v tr
khc nhau s ghi li c m thanh stereo nhng lng mu cn lu tr l gp i so vi
m thanh mono. Vic pht m thanh cng kh n gin. Khi ta c cc mu m thanh
di dng s cng vi t l ly mu v kiu d liu, ta s a d liu ra n v x l m
thanh, ni chuyn i cc thng tin thnh mt tn hiu cho loa, loa s phn tch v chuyn
n thnh s rung ca mng loa , to ra s chuyn ng ca cc phn t xung qoang trong
khng kh v to sng m thanh.

Cht lng m thanh v nn : c nhiu phng php nn gim dung lng ca
file m thanh c ghi, ng ngha vi vic tn hao, mt b phn ca m thanh ban u
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 25

s b lc b. Cc nh dng m thanh thng c s dng trong game l MP3 hay
OGG, tuy l m thanh c nn nhng cht lng chp nhn c v gii quyt vn
dung lng.
m thanh chia lm m hiu ng (Sound effect) v nhc (Music) :
Nhc: Thng c thi gian di v chim nhiu b nh, v vy khi pht nhc trong
game, ta thng truyn trc tip cc mu m thanh t a thay v vic ti trc vo b
nh ri mi pht. Thng thng game ch c mt file nhc, nn ta ch cn truy nhp a
mt ln.
Cc m thanh hiu ng ngn nh ting n, ting va chm : Ta thng s dng
nhiu m hiu ng cng mt thi im , do vic pht trc tip cc mu t a cho mi
m hiu ng l khng hp l. Nhng cc m hiu ng ny ch chim dung lng b nh
nh, nn ta c th ti cc mu m hiu ng v b nh v c th ng thi pht chng.

1.2.5 ha
ha l m-un cui cng trong cc m-un ca framework. N chu trch nhim
v nh ln mn hnh. Phn di y s trnh by cc khi nim c bn trong ha
Rasters, Pixels (im nh) v Framebuffers
o Raster l mt li hai chiu, c chiu di v rng gii hn th hin s lng
im nh (pixels) trn mi hng, ct
o Mi im nh (pixel) c hai thuc tnh : v tr trong li v mu. V tr ca
im nh l mt ta hai chiu trong h ta , gc ca h ta l gc tri
bn trn ca li.
o B x l ha truy cp vo mt vng nh c bit gi l b nh truy cp
ngu nhin video (VRAM). Trong VRAM c mt khu vc dnh ring lu
tr cc im nh s c hin th ln mn hnh, gi l framebuffer. Mt mn
hnh y hnh nh gi l mt Frame. Mi im nh (pixel) trn li hin th
s c tng ng mt a ch nh cha mu ca im nh . Khi mun thay
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 26

i hin th trn mn hnh, ch cn thay i gi tr mu ti nh ca pixel
tng ng.

Hnh 1.7 Li hin th v VRAM [15]
Color (mu): v mt vt l mu l phn ng ca vng mc v v no th gic vi
cc sng in t. Mi sng c c trng bi bc sng v cng ca n. Con ngi
c th nhn cc mu c bc sng t 400-700 nanomets (nm), cn gi l ph nh sng
nhn thy. Cc mn hnh s pht cc sng in t ti mi im nh, v im nh s hin
th mu sc. Mi im nh s c s c to thnh t ba ht hunh quang khc nhau
pht nh sng , xanh l cy, xanh bin. Vic trn ba mu c bn ny vi cng khc
nhau s to ra cc mu khc nhau cho im nh, cn gi l m hnh mu RGB. Cng
ca mi mu c bn c gi tr t 0 ti 1. Mu en s c trn vi t l (0,0,0) v mu
trng l (1,1,1).

M ha mu :
o M ha RGB dng 32 bit s thc : dng 12 bytes cho mi im nh v di
cng t 0-1.
o M ha dng 24 bit s nguyn: dng 3 hoc 4 bytes cho mi im nh, v di
cng t 0-255. Cn gi l m ha RGB888
o M ha dng 16 bit s nguyn : dng 2 bytes cho mi im nh, mu v
xanh da tri c di cng 0-31, cn mu xanh l cy c di t 0-63. Cn
gi l m ha RGB565.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 27

Cc loi m ha c s dng cn c gi l su ca mu. nh c to ra v
lu tr trong a hay b nh c su c xc nh. Cc loi mn hnh hin nay thng
c su mu mc nh l 24 bit, c th c cu hnh s dng t hn trong nhiu
tng hp.

nh dng nh v nn : c cht lng tt nht, phng php m ha RGB888
s c chn, 24 bt cho mi im nh (pixel). Gi s nh c kch thc 1024 x 1024
pixels, n c dung lng khong 3MB. Nu dng m ha RGB565 s gim xung cn
khong 2MB. Cng nh m thanh, hnh nh cng c nhiu phng php nn nhm gim
dung lng. Cc nh dng ph bin l JPG, PNG. JPG l nh dng c nn v mt s
thnh phn gc b lc b trong qu trnh nn. PNG l nh dng nn tn hao t nht,
n s ti to nh vi 100 % ng vi bn gc. Vic la chn nh dng s ty thuc vo
dung lng b nh. nh s c gii nn khi ti vo b nh, sau khi gii nn n s
dng mng cc mu ca cc pixel v c lu trong RAM thng thng. Khi nh
c load, n c th v t Ram ln Framebuffer bng cch chuyn mu ca cc im nh
ca bc nh ln cc v tr tng ng trn Framebuffer. Vic ny s c h tr bi cc
API c cung cp.

Trn mu ( Blending) :phn mm ha ngoi vic cho bit cc gi tr RGB ca
cc im nh cn cho bit gi tr v trong sut ca im nh. N c coi l mt
thnh phn thm ca mu ca im nh, cng c th m ha nh cc thnh phn RGB.
Phng php m ha RGB888 l phng php m ha dng kiu s nguyn 32 bit, trong
dng 24 bit lu tr b RGB. Cn 8 bit cha s dng , c th dng lu tr gi tr
anpha ( i din cho trong sut ca im nh). Anpha s c di gi tr t 0-255, gi tr
0 l hon ton trong sut, cn 255 l hon ton khng trong sut. Phng php m ha
ny gi l ARGB8888. Khi v cc im nh c gi tr anpha bng khng s b b qua,
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 28

cc im nh c gi tr anpha l 255 s c ln dim nh ch, trng hp anpha nm
trong khong 0-255 im nh s c trn.

V d trn mu:


Hnh 1.8 V d v trn mu (Blending)[15]
Nhng lu khi trn mu:
o Phng php trn gm hai u vo v mt u ra, mi im c th hin bi
b RGB v gi tr anpha.
o Hai u vo gi l ngun v ch. im ngun l im nh t bc nh chng
ta mun v ln ch (trn framebuffer). im ch l im s c trn (tng
phn) cng vi im ngun.
o u ra cng l im c th hin bi b RGB v gi tr anpha. Gi tr anpha
s c b qua u ra.
o n gin, di gi tr ca RGB v anpha s c ly trong khong 0-1
o Phng trnh trn c nh ngha t c im nh nh mong mun,
phng trnh trn n gin nht nh di y:
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 29

red = src.red * src.alpha + dst.red * (1 src.alpha)
blue = src.green * src.alpha + dst.green * (1 src.alpha)
green = src.blue * src.alpha + dst.blue * (1 src.alpha)

o V d vi phng trnh trn:
src = (1, 0.5, 0.5), src.alpha = 0.5, dst = (0, 1, 0)
red = 1 * 0.5 + 0 * (1 0.5) = 0.5
blue = 0.5 * 0.5 + 1 * (1 0.5) = 0.75
red = 0.5 * 0.5 + 0 * (1 0.5) = 0.25
(gi tr anpha c b qua)
o Cc API ha ca Android cho php ngi dng xc nh chnh xc cch
trn nh.
1.2.6 Game Framework
Vic cui cng sau khi hon thnh cc m-un l xc nh nhng cng vic c
game framework thc hin :
Mi game gm nhiu cnh,mi cnh thc hin nhng vic nh nhau : nhn u
vo t ngi dng, p dng ln trng thi ca cnh v v cnh ln mn hnh. C nhng
cnh khng cn u vo v d nh cnh t chuyn khi ht thi gian.
Cc cnh cn phi c qun l, cn theo di cnh hin ti v cch thc chuyn
sang cnh khc.
Game s cp quyn truy cp cho cc cnh ti cc m-un nh : ha , m thanh,
u vo, c th ti ti nguyn, nhn u vo, v cnh, pht m thanh,
Game c thc hin trong thi gian thc, do cc cnh cn c cp nht v v
cng thng xuyn cng tt, hai vic ny c thc hin trong mt vng lp chnh (main
loop). Vng lp ny s chm dt khi ngi chi thot game.
Game cng cn theo di trng thi ca ca s v thng bo cho cnh hin ti s
kin ca ca s.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 30

Game framework s thc hin vic thit lp ca s v to thnh phn giao din
ngi dng (UI) c th v ln v nhn u vo t ngi dng
Cc ng dng giao din ngi dng (UI applications) thng lm vic trn m
hnh da trn s kin, h iu nh s thng bo cho ng dng cc s kin u vo, v ng
dng c trch nhim x l cc thng bo . Mi vic c thc hin trong mt lung
chnh gi l lung UI. Vic x l cc thng bo sau li gi t h iu hnh c thc
hin cng sm cng tt, do vng lp chnh thc hin cp nht v v cnh s c thc
hin trong mt lung khc. Cn c c ch ng b gia lung chnh (lung UI) v
lung chy vng lp chnh).
1.3 Android cho pht trin game
1.3.1 Vng i Activity
Khi chng ta lp trnh Android th iu u tin chng ta phi hiu cc hnh ng ca
activity n din ra nh th no? Trn Android iu ny c goi l activity life cycle. N
m t cc trng thi v s chuyn i gia cc trng thi vi nhau ca activity hoc c
th hiu l s xp xp cc activity vo mt Stack, activity no trn th u tin hn
activity di v tng t nh vy.
1.3.1.1 Nguyn l
Mt Activity c th mt trong ba trng thi sau:
Running: Trong trng thi ny th activity ang c xp nh stack l giao din
hin trn mn hnh tng tc trc tip vi ngi dng.
Paused: Xy ra khi activity ny vn hin th trn mn hnh nhng b che mt phn bi
mt activity trong sut hoc mt hp thoi hoc nu mn hnh b kha. Activity trng
thi paused c th b hy bt c lc no bi h thng android (v d, khi thiu b nh).
Tuy nhin nu khng b hy th Activity trng thi ny s ch cho n khi c y ln
nh stack tr v trng thi running.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 31

Stopped: iu ny xy ra khi activity hon ton b che bi mt activity khc v do
khng cn c th nhn thy trn mn hnh. V mt ln na h thng li c th quyt nh
hy activity ny bt c lc no khi chng thiu b nh.
trng thi paused v stopped h thng c th hy activity bt c lc no bng cch
gi hm finish() hoc m thm hy process. Mt khc hai trng thi ny hon ton c
th tr v trng thi running v khi cng ging nh nhng i tng c lu trong
b nh Java th cc bin thnh phn ca n tr v ng trng thi ban u trc khi b
chuyn sang trng thi running hoc stopped.
Mt activity c nhng phng thc chnh sau m chng ta c th ghi ly thng
tin khi trng thi thay i:
Activity.onCreate(): Hm ny c gi khi activity ca chng ta c khi chy
ln u tin. Trong hm ny chng ta s thit lp tt c cc thnh phn ca giao din
ngi dng v lin kt chng vi cc bin u vo ca h thng. Phng thc ny ch
c gi mt ln trong vng i ca activity.
Activity.onRestart(): Phng thc ny c gi khi activity c khi phc t
trng thi stopped. Trc th activity gi hm onStop().
Activity.onStart(): Hm ny c gi sau hm onCreate() hoc khi activity c
khi phc t trng thi stopped n s c gi sau hm onRestart().
Activity.onResume(): N c gi sau hm onStart() hoc khi activity c khi
phc t trng thi paused (v d khi mn hnh c m kha)
Activity.onPause(): Hm ny c gi khi activity ri vo trng thi paused v n
c th l thng bo cui cng chng ta nhn c v h thng Android c th hy process
ca chng ta mt cch m thm.
Activity.onStop(): Hm ny c gi khi activity ri vo trng thi stopped v hm
onPause() lun c gi trc hm ny.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 32

Activity.onDestroy: Hm ny c gi khi kt thc mt vng i activity. Ch
rng hm ny c th s khng bao gi c gi nu h thng hy process mt cch m
thm.

Hnh 1.9 Vng i Android [1]
1.3.1.2 Mt s c im ca vng i activity
Trc khi mt activity bt u nhy vo trng thi running th n lun gi hm
onResume() hay bt c khi no chng ta khi phc activity t trng thi paused v
stopped. Cng v vy nn chng ta khng cn quan tm n hm onRestart() v onStart().
Activity c th b hy mt cch m thm sau khi gi onPaused() nn chng ta nn
ghi vo hm onPaused() thay v ghi nn cc hm nh onStop() hay onDestroy().
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 33

Trong hm ny chng ta phi chc chn rng tt c nhng trng thi chng ta mun lu
li nh im cao nht, cp ca nhn vt phi c lu tr ra bn ngoi v d nh th
SD bi v sau hm onPause() tt c s b mt v chng ta cha bit liu activity c th
chy li mt ln na hay khng hay ngi dng s khng bao gi cho chy li.
Chng ta bit rng hm onDestroy() c th khng bao gi c gi nu h thng
hy activity sau hm onPause() hoc onStop(). Tuy nhin thnh thong chng ta mun
bit activity thc s b hy? hay hm onDestroy() cha c gi?. Lp Activity c
phng thc Activity.isFinishing() gip chng ta c th kim tra xem activity b hy
hay cha?. Trong hm onPause() chng ta cng phi gi hm ny m bo rng
activity cha b hy trc khi gi hm.
1.3.1.3 p dng trong game
n gin chng ta c th ghi 3 hm chnh l onCreate(), onResume(), onPause()
onCreate(): Trong hm ny chng ta s thit lp ca s (mn hnh chnh) v cc
thnh phn giao din m chng ta s v da trn nhng thnh phn u vo.
onResume(): Trong hm ny chng ta s bt u (Start) hay lp li (Restart) lung
chnh.
onPause(): Hm ny n gin chng ta dng dng lung chnh, v nu hm
isFinish() tr v true th chng ta phi lu li tt c nhng trng thi cn thit.

1.3.2 X l u vo
phn ny chng ta s bn n vic ly thng tin t nhiu u vo khc nhau v cch
lm vic vi chng.
1.3.2.1 n chm
Khi chng ta chm vo mn hnh th trong Android c mt giao din (interface) lng
nghe (listener) s kin v bo li vi chng ta. S kin chm xy ra th n s c a
n OnTouchListener interface v ng k chng vi View. OnTouchListener interface
ch c mt phng thc khai bo duy nht l:
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 34

Public abstract boolean onTouch (View v, MotionEvent event)
Mt OnTouchListener c th c ng k vi bt k View no thng qua hm
View.setOnTouchListener() v s c gi trc khi MotionEvent c gi n View.
Chng ta c th tng tc vi View bng cch thc hin (implementation) trong hm
onTouch().
i tng MotionEvent gm c 3 phng thc cn quan tm:
MotionEvent.getX() v MotionEvent.getY(): Hai phng thc ny cho php chng
ta ly ta X v Y ca s kin chm. Ta ca h thng c xc nh vi gc nm
nh bn tri ca view chiu trc x l sang phi cn trc y l i xung. Lu l ta
y tr v di dng floats
MotionEvent.getAction(): Phng thc ny tr v hnh ng ca s kin chm. N
c nh ngha bng cc hng s nguyn tng ng vi MotionEvnet.ACTION_DOWN,
MotionEvent.ACTION_MOVE, MotionEvent.ACTION_CANCEL,
MotionEvent.ACTION_UP.
C th MotionEvent.ACTION_DOWN xy ra khi tay chng ta chm ln mn hnh.
Tip theo khi tay chng ta di chuyn khng di trn mn hnh (vut) th l s kin
MotionEvent.ACTION_MOVE. C mt im lu y l chng ta lun xy ra s kin
MotionEvent.ACTION_MOVE v tay chng ta khng th gi im tht s trn mn hnh.
Khi chng ta nhc tay ln khi mn hnh th s xy ra s kin
MontionEvent.ACTION_UP.
1.3.2.2 a chm
X l s kin a chm n cng tng t nh x l s kin n chm. Chng ta s
implement giao din OnTouchListener tng t nh vi s kin n chm. Chng ta c
th ly i tng MotionEvent c d liu hay x l cc hnh ng nh DOWN,
UPTuy nhin cng c mt s im khc nhau m chng ta cn bn n.
Con tr nhn dng v cc ch s
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 35

Con tr nhn dng (pointer ID) hay cc ch s (indices) l hai thnh phn to nn s
khc bit gia vic x l a chm v n chm. C th trong n chm khi chng ta
mun ly ta ca im chm th hai phng thc MotionEvent.getX() v
MotionEvent.getY() s tr v ta x,y tng ng cn i vi a chm chng ta s s
dng mt bin th ca hai phng thc trn:
event.getX(pointerIndex);
event.getY(pointerIndex);
y thng ngi ta s hy vng rng pointerIndex tng ng vi mt ngn tay
chm trn mn hnh (v d mt ngn tay chm c ch s con tr pointerIndex = 0 v mt
ngn tip theo s c ch s con tr pointerIndex = 1 v .) tuy nhin tht khng may l
mi th li khc.
C th th cc pointerIndex l ch s mng ni b ca MotionEvent. Chng s gi ta
tng ng vi tng ngn tay c th khi chm vo mn hnh. Mi ngn tay trn mn
hnh c mt s nhn dng c gi l pointer indentifier. Chng l mt s ty - xc
nh duy nht mt th hin ca mt con tr chm vo mn hnh. s dng n nhn
dng cc thao tc chm ca ngi dng trn mn hnh chng ta c th s dng hm ring
bit MotionEvent.getPointerIdentifier(int pointerIndex). Hm ny s tr v con tr nhn
dng (pointer indentifier) da trn ch s con tr (pointer index). Mt con tr nhn dng
ging nh mt ngn tay chng ta khi chm ln mn hnh. T c bn chng ta c th
thy s khc bit gia x l n chm v a chm v mt l thuyt.
1.3.2.3 X l s kin t bn phm
bt c s kin t bn phm chng ta implement mt giao din listener khc
c gi l OnKeyListener. N c mt phng thc n c gi l OnKey():
Public boolean onKey(View view, int keyCode, KeyEvent event)
Lp View y s nhn s kin t bn phm, i s keyCode l mt hng s c xc
nh bi lp KeyEvent. C th mi phm trn bn phm mn hnh v mi phm trn bn
phm h thng c mt s duy nht gn vi n.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 36

Tip theo chng ta ni n lp KeyEvent. Lp ny tng t nh ln MotionEvent n
cng gm ai phng thc chnh:
KeyEvent.getAction(): Hm ny s tr v KeyEvent.ACTION_DOWN,
KeyEvent.ACTION_UP v KeyEvent.ACTION_MULTIPLE. Chng ta nn trnh loi cui
cng v chng ta nn khng nn n hai phm trn mn hnh mt lc. Chng ta ch cn hai
loi u khi chng ta n phm v nh phm.
KeyEvent.getUnicodeChar(): Hm ny s tr v k t Unicode ca phm m ta
chm vo.
nhn c cc s kin t bn phm th View cn phi c focus. Ta c th tin
hnh nh sau:
View.setFocusableInTouchMode(true);
View.requestFocus();
Phng thc u tin o bo rng View c th c focus. Phng thc th hai yu
cu c th View s c focus.
1.3.2.4 Cm bin gia tc
Chng ta tng thy rt nhiu game c hiu ng nhng i tng trong game di
chuyn khi chng ta nghing my c bit l nhng game ua t hay xe my. chnh
l nh cm bin gia tc ca in thoi. Vy lm th no ly thng tin hay iu khin
theo mun th di y chng ta s bn n nhng l thuyt c bn v n.
Cng nh n chm vi a chm th chng ta phi ng k mt b lng nghe
(listener). Giao din chng ta cn implement c gi l SensorEventListener gm hai
phng thc cn ghi :
public void onSensorChanged(SensorEvent event);
public void onAccuracyChanged(Sensor sensor, int accuracy);
Phng thc u tin c gi khi mt s kin gia tc c gi ti. Phng thc th
hai c gi khi chnh xc ca gia tc thay i. Tuy nhin hai hm ny chy c
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 37

th trc ht chng ta phi chc chn rng l chic in thoi ca chng ta ci t cm
bin gia tc.
s dng c cm bin gia tc trn thit b th iu u tin chng ta phi lm l
phi c mt th hin ca SensorManager.
SensorManager manager =
(SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
SensorManager l dch v h thng (system service) n cung cp bi h thng
Android. Android gm rt nhiu dch v h thng, mi dch v khc nhau cung cp
nhng thng tin khc nhau ca h thng khi ngi dng yu cu.
Khi chng ta c SensorManager th chng ta c th kim tra xem cm bin gia tc c
sn hay cha?
Boolean hasAccel = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()>0
Nu tr v true ngha l cm bin gia tc c ci t v chng ta c th ly n t
SensorManager v ng k chng vi SensorEventListener nh sau:
Sensor sensor = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
Boolean success = manager.registerListener(listener, sensor,
SensorManager.SENSOR_DELAY_GAME);
i s SensorManager.SENSOR_DELAY_GAME ch r cch b lng nghe cp nht
trng thi mi nht ca cm bin gia tc. y l mt hng s c bit c thit k cho
game v vy chng ta nn s dng n. Ngoi ra phng thc th hai tr v kiu boolean
ch ra qu trnh ng k c lm vic hay khng. V th nn chng ta phi kim tra kt
qu tr v chc chn rng chng ta ly c bt k s kin no t cm bin.
Khi chng ta ng k b lng nghe th chng ta s nhn c SensorEvents trong
phng thc SensorEventListener.onSensorChanged(). Phng thc ny ng rng n
ch c gi khi trng thi ca cm bin thay i.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 38

1.3.3 X l File
Android cung cp cho chng ta mt s cch c v ghi file. y chng ta s
cp n lm sao truy nhp vo b nn goi, c d liu trong th mc assets v shared
preferences.
1.3.3.1 c d liu t th mc Assets
Th mc Assets l ni lu tr nhng tp tin cn thit khi chng ta khi chy game. V
d nh hnh nh nhn vt, hnh nh nn ca game, nhc hay m thanh ca game
Chng ta giao tip vi cc file trong th mc Assets thng qua lp gi l
AssetManager. Di y chng ta s ly tham chiu n:
AssetManager assetManager = context.getAccess();
Trong context l th hin ca giao din Context cn giao din Context c
implement t lp Activity. Tip theo l chng ta s m file trong th mc Assets nh sau:
InputSream inputStream = assetManager.open(dir/dir2/filename.txt);
Phng thc ny s tr v i tng InputStream, chng ta c th s dng n c
bt k mt loi file no. Cn phn trong ngoc kp l ng dn tng i ti file.
1.3.3.2 Truy nhp vo b nh ngoi
Vic load d liu nh nh m thanh trong Assets rt thun li cho game khi khi chy
ln u tin. Tuy nhin c mt s d liu chng ta cn s dng li sau khi chi v d nh
l im cao Chnh v vy chng ta s phi cp n l thuyt v vic c ghi vo b
nh bn ngoi.
Trong Android c nhiu cch lu tr d liu nh s dng shared preferences, s
dng SQLite Nhng la chn trn c mt im chung l khng th x l tt nhng
file bit ln. V vy phng php ti u nht l s dng th nh SD lu tr d liu
ngoi.
iu u tin giao tip vi th nh SD l chng ta phi yu cu truy nhp b nh
ngoi trong file manifest.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 39

<users-permission
android:name=androd.permission.WRITE_EXTERNAL_STORAGE/>
Tip theo l chng ta phi kim tra chc chn rng l b nh ngoi ang trng thi
sn sng hot ng. V d, khi chng ta to my o m khi thit lp li khng cp b nh
ngoi th chng ta khng th c thao tc c ghi no c. Mt l do khc na khng th
truy nhp vo b nh l b nh ang b truy nhp bi mt thit b khc ( in hnh
chnh l khi ngi dng ang truy vn trn b nh ngoi nh ang tm kim hay m hp
thoi b nh ngoi). V vy cch chng ta kim tra trng thi ca b nh ngoi l:
String state = Enviroment.getExternalStoreageState();
Chng ta s nhn c kt qu tr v l String. Nu chui String ny trng vi mt
hng s (String) m lp Environment nh ngha c gi l
Enviroment.MEDIA_MOUNTED th chng ta s c y tnh nng c ghi vo b nh
ngoi. Ch l y chng ta so snh String bng hm equals() ch khng dng du =
v du = n khng hot ng trong mi trng hp.
Khi chng ta xc nh c l chng ta chc chn c th truy nhp vo b nh ngoi
th vic tip theo l xc nh dng dn n th mc l chng ta mun lu file. Trc
ht ta phi ly c ng dn th mc root bng cch thc hin nh sau:
File externalDir = Environment.getExternalStorageDirectory();
Sau khi c ng dn th mc root ta c th t trin khai ng dn n cc th mc
khc trong project.
1.3.3.3 Shared Preferences
Android c cung cp mt API n gian lu cp gi tr. N c gi l
SharedPreferences API ny rt thun tin cho vic lu tr tm thi cc dng text hay
truyn gia cc activity vi nhau. Di y l hai cch in hnh ly mt th hin
ca SharedPreferences t activity:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 40

SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
Phng thc u tin tr li cho ta mt SharedPreferences ph bin cn phng thc
th hai li cho php chn ch ring t. Ch ring t Context.MODE_PRIVATE l
mc nh ngoi ra ta c th chn hai ch khc l
Context.MODE_WORLD_READABLE v Context.MODE_WORLD_WRITEABLE. Tuy
nhin hai ch khng cn thit i vi vic xy dng game ca chng ta.
iu u tin s dng sharedPreferences l chng ta phi to editor:
Editor editor = prefs.edit();
Tip theo l thm cc cc gi tr tng ng vi kha (key):
editor.putString(key1, obama);
editor.putInt(key2, 5);
V cui cng l chng ta s lu li nhng g va thm vo:
editor.commit();
ly li d liu th chng ta lm nh sau:
String value1 = prefs.getString(key1, null);
int value2 = prefs.getInt(key2,0);
Kt qu tr v th value1 s l obama cn value2 s l 5. Nu m chng ta g key sai
v khng tm thy th n s tr v gi tr mc nh chnh l i s th hai chng ta truyn
vo. C th chnh l null v 0.
1.3.4 X l m thanh
V Audio th Android cung cp API gip ngi dng d dng to ra cc hiu ng m
thanh hay nhc nn trong game. Di y l nhng im quan trng vic x l m thanh
trong game.
1.3.4.1 iu khin m lng
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 41

m lng trong Android cn lu rng khi chng n nt tng gim m lng th n
s iu khin nhng m lng khc nhau ph thuc vo ng dng m chng ta ang chy.
V d khi chng ta nghe gi th n nt tng gim th s tng gim m lng cuc gi, khi
chng ta xem video trn youtube th nt tng gim s iu khin m lng ca video hay
khi chng ta ang mn hnh chnh th nt tng gim s iu khin m lng ca h
thng nh l chung hay ting ca tin nhn
Android c nhng lung audio khc nhau cho nhng mc ch khc nhau. R rng
nht l khi bn g dng code AudioManager th s c nhiu gi tip theo v cc loi
stream. y chng ta s dng music stream. Trc khi chi nhc chng ta phi m
bo rng nt tng gim m lng s iu khin ng lung audio bng cch nh sau:
Context.setVolumeControlStream(AudioManager.STREAM_MUSIC);
1.3.4.2 Hiu ng m thanh
Android cung cp sn cho chng mt lp chi hiu ng m thanh d dng l
lp SoundPool. u tin chng ta to i tng nh sau:
SoundPool soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
Tham s u tin l s lng hiu ng m thanh ti a c th chi cng mt lc. iu
khng c ngha chng ta khng th np hn 20 hiu ng m thanh m n ch hn ch
ti a l 20 m thanh pht ng thi. Tham s th hai chng ta chn music stream ni m
SoundPool s a m thanh ra. Chng ta chn music stream v chng ta c th iu khin
m lng tt vi lung ny. Tham s cui cng l s hiu ng hin ti ang khng s
dng, tham s ny nn mc nh l 0.
ti hiu ng m thanh t file ln b nh heap chng ta cn s dng phng thc
SoundPool.load(). C th i nhng file chng ta ti ln t th mc Assets th chng phi
dng mt phng thc np chng ca phng thc trn:
AssetFileDescriptor descriptor = assetManager.openFd(sound.ogg);
int soundID = soundPool.load(descriptor,1);
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 42

Tham s u vo th nht l AssetFileDescriptor chng ta c th ly d dng nh
AssetManager. Tham s th hai l u tiu ca hiu ng m thanh.
Tip theo pht cc hiu ng m thanh ny th chng ta lm nh sau:
soundPool.play(soundID, 1.0f, 1.0f,0,0,1);
Trong soundID nh chng ta ly trn, hai tham s tip theo l m lng bn
tri v bn phi tng ng 0 l thp nht cn 1 l ln nht. Ba tham s cn li trong
hai tham s u tin l hiu ng lp i vi nhc ci ny chng ta bng 0 v khng
dng lp. Tham s cui cng nu ln hn 1 th hiu ng m thanh s nhanh hn cn nh
hn 1 th chm hn.
Khi chng ta khng cn n hiu ng m thanh na th chng ta s gii phng b nh
bng cch:
soundPool.unload();
Cn nu chng ta mun hy c th hiu ng no th chng ta s s dng phng
thc np chng sound.unload(soundID). Hn na khi khng cn dng n SoundPool th
chng ta c th hy i tng bng cch gi SoundPool.release().
1.3.4.3 Streaming Music
Nhng m thanh nh c dung lng nh tc bit thp ph hp vi gii hn ca b
nh heap tuy nhin nhng m thanh di nh nhc nn th li khng ph hp . V vy
chng ta cn phi x l m thanh lin quan n chip hay card m thanh bng cch l c
tng on nh gii m n sang d liu PCM th.
tin hnh x l cc cc file nhc ny chng ta s khi to i tng ca lp
MediaPlayer nh sau:
MeiaPlayer mediaPlayer = new MediaPlayer();
Sau chng ta cng thit lp ng dn n file nhc nh vi file m thanh ni
phn trc:
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 43

AssetFileDescriptor descriptor = assetManager.openFd(music.mp3);
mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength());
Tip theo trc khi chng ta c th chy nhc th chng ta phi gi phng thc
prepare() ca MediaPlayer:
mediaPlayer.prepare();
Phng thc ny nhm kim tra xem file nhc ny MediaPlayer c th c c
khng?
Sau th chng ta c th dng cc phng thc ca MediaPlayer chi nhc, tm
dng nhc
mediaPlayer.start(): Phng thc ny dng bt u chi nhc v n ch c
gi sau hm prepare().
mediaPlayer.pause(): Phng thc ny dng tm dng nhc nhng nn nh
phi gi hai hm trn trc khi gi hm ny v khi mun nhc tip tc chy tip th ta c
th gi hm start() m khng cn phi gi hm preapre().
mediaPlayer.stop(): Phng thc ny cng l dng nhc tuy nhin li khng
th chi tip nhc c nn ch c chi nhc li t u v li phi gi hm prepare()
trc.
media.Player.setLooping(true): Phng thc ny nu tham s truyn vo l true
th cho php lp li khi chi xong bn nhc v nu l false th ngc li.
mediuwowcjayer.setVolume(1,1): Phng thc ny thit lp m lng loa tri
v loa phi. m lng s tng t 0 n 1.
mediaPlayer.setOnCompletionListener(listener): Phng thc ny dng kim
tra xem l bi nhc chy ht hay cha?
mediaPlayer.isPlaying(): Phng thc ny kim tra xem bi nhc c ang chy
hay khng?
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 44

mediaPlayer.release(): Phng thc ny gii phng i tng MediaPlayer khi
dng xong.
1.3.5 API Android h tr lp trnh ha
Android cung cp 2 API ln dnh cho lp trnh ha. Mt c s dng ch yu
cho lp trnh ha 2D n gin l Canvas API, cn li l API s dng tng tc phn
cng cho lp trnh ha 2D, 3D OpenGL ES. Trong phm vi ca n s s dng
API OpenGL cho lp trnh ha 2D.
OpenGL ES c nhiu phin bn nh 1.0, 1.1, 2.0, v gn nht l 3.0. Tt c cc thit
b Android u h tr OpenGL ES 1.0, vi phin bn 1.1 th hu ht cc thit b u h
tr. Phin bn 2.0 ph v s tng thch vi cc phin bn 1.x . Nhiu thit b th h
sau h tr OpenGL ES 2.0, nhng vic lp trnh vi phin bn 2.0 i hi s phc tp
hn trong khi cc phin bn 1.x l cho hu ht cc game. Do phm vi n s
hng n s dng phin bn OpenGL ES 1.x.
1.3.5.1 Khi nim v OpenGL ES
OpenGL ES l mt API c cung cp di dng mt b cc file tiu dng C bi
tp on Khronos cng vi nhng c im k thut chi tit hng dn API trong cc tiu
c s dng nh th no.
Hot ng ca OpenGL ES : n lm vic nh mt camera. chp mt bc nh
ta cn i ti cnh cn chp. Cnh bao gm nhiu i tng, chng u c v tr, hng
tng quan vi camera, cng nh cc thng s khc nh color, texture. Camera cng c
cc thuc tnh nh di tiu c, tm nhn, phn gii nh, kch thc nh c chp,
cng vi mt v tr v hng duy nht.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 45


Hnh 1.10 [15]
Mi i tng u c v tr v hng tng quan vi gc ca cnh. Camera c th
hin bng hnh con mt, cng c v tr v hng tng quan vi gc ca cnh . Hnh kim
t thp trong hnh trn c gi l gc nhn ct ngang, n cho bit khong khng gian m
camera chp v camera c nh hng nh th no. Hnh trn mu trng l ngun sng
ca scene, cng c v tr tng quan vi gc.
Mt s nh ngha:
i tng (objects) : : l tng hp 4 thnh phn c bn: hnh dng, mu sc,
kt cu, v cht liu. Hnh dng c xc nh bi tp cc hnh tam gic. Mi
tam gic l tp hp 3 im trong khng gian 3D
nh sng : OpenGL cung cp nhiu loi nh sng vi cc thuc tnh a dng.
Chng l nhng i tng ton hc, c v tr v nh hng trong khng gian
3D
Camera : cng l i tng ton hc,c mt v tr v nh hng trong khng
gian 3D, ngoi ra cn c cc thng s qun l phn hnh nh chng ta nhn
thy, tt c to nn gc nhn ct ngang (th hin bi hnh kim t thp trong
hnh). Mi th trong kim t thp c th c nhn thy bi camera, mi th
ngoi s khng xut hin trong bc nh cui cng.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 46

Ca quan st ( viewport) : xc nh kch thc v phn gii ca bc nh
cui cng

OpenGL c th cu to nn mt nh bitmap 2D t im nhn ca camera trong cnh.
Tt c mi th c nh ngha trong khng gian 3D, v OpenGL s chuyn sang khng
gian 2D nh cc php chiu (Projections)

Cc php chiu (Projections) : OpenGL ES ch yu lm vic vi cc hnh tam
gic, mi tam gic c ba im trong khng gian 3D. biu din mt tam gic trn
framebuffer, OpenGL ES cn bit ta ca ba nh trong h ta pixel c bn ca
framebuffer. Khi bit c ta ca chng, tam gic c th d dng v trong
framebuffer. C hai kiu php chiu thng c s dng trong lp trnh ha 3D :
Php chiu song song (parallel projection) v Php chiu phi cnh(perspective
projection)

Hnh 1.11 Php chiu song song ( bn phi) v php chiu phi cnh ( bn tri)[15]
Mi php chiu u s dng mt mt chiu (Projection Plane) , n ging nh vng
mc ca mt, l ni nh sng to thnh hnh nh cui cng. N l phn ca mt ct ngang
c OpenGL chiu cc im ln, cn c gi l mt ct gn (near clipping plane), v
cng c h ta ring. H to ny c th ty chnh theo nhu cu nh OpenGL
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 47


Hnh 1.12 Mt ct gn v h ta [15]
iu chnh theo kch thc ca thit b (Normalized Device Space) v ca
quan st (Viewport) : Khi OpenGL tm ra c cc im chiu trn mt ct gn, n
cn c chuyn v ta ca im nh trn Framebuffer. Trc tin cc im phi
c chuyn qua bc Normalized Device Space. Cng thc chuyn sang ta im
nh:
pixelX =(norX +1) / (viewportWidth +1) +norX
pixelY =(norY +1) / (viewportHeight +1) +norY
Trong :
- norX, norY l im c ty chnh cho ph hp vi thit b.
- viewportWidth v viewportHeight l kch thc ca quan st (n v pixels) trn
trc x v y.
Vic chuyn i ny s c thc hin t ng bi OpenGL
Ma trn: OpenGL ES thc hin php chiu da trn cc ma trn.
OpenGL ES c 3 loi ma trn khc nhau c p dng cho cc im ca cc mu:
- Model-view matrix: C th s dng ma trn ny di chuyn, quay hay thay i
kch c cc im ca tam gic (phn Model), v xc nh v tr, hng ca
camera (phn view)
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 48

- Projection matrix: ma trn ny dng m ha php chiu v to ra gc nhn ct
ngang cho camera
- Texture matrix: cho php thao tc trn h ta texture ( trnh dng ma trn
ny)
Quy trnh render trong OpenGL:


Hnh 1.13 Cc bc v mt tam gic
Tam gic s c chuyn i ln u bi ma trn model-view. Ngha l cc im
ca n c nhn vi ma trn ny, php nhn rt hiu qu di chuyn cc im ca tam
gic.
Kt qu u ra sau c phn vi ma trn projection matrix, hiu qu trong
vic chuyn im 3D sang mt chiu 2D.
gia hay song song 2 bc trn, cc ci t v nh sng (lights) v cht liu
(materials) cng c p dng cho tam gic.
Sau , tam gic chiu s c gn vo vng mc (retina) v chuyn sang h ta
ca framebuffer thng qua vic p dng chuyn i ca quan st (viewport
transformation ).
Bc cui cng, OpenGL s in y cc pixel ca tam gic bng mu c p
dng t bc 3, kt cu (textures) c p dng cho tam gic, v trng thi trn
(blending) ca mi pixel ca tam gic c th hoc khng c kt hp vi cc pixel trong
framebuffer.
1.3.5.2 S dng OpenGL
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 49

OpenGL ES cn ci t mt vi th trc khi c th dng v hnh. Hai th c
quan tm nht l Ma trn chiu (projection matrix) cng vi gc nhn ct ngang ca n (
view frustrum) v ca quan st (viewport), th s iu chnh kch thc hnh nh u ra,
v v tr ca u ra trong framebuffer.

Xc nh ca quan st ( viewport) : OpenGL ES dng ca quan st nh mt
cch chuyn i ta ca im chiu trn mt ct gn (near clipping plane) sang h
ta im nh (pixel) ca framebuffer. Chng ta c th s dng mt phn hay ton b
framebuffer.
GL10.glViewport(int x, int y, int width, int height)
Trong OpenGL ES, ta gc ca framebuffer l gc tri bn di (x,y) trong
phng thc trn ch gc di bn tri ca ca quan st (viewport) trong framebuffer.
Phng thc ny ging nh thit lp mt h ta 2D render, nhng thc t
khng phi vy, n ch xc nh phn framebuffer m OpenGL ES dng ghi u ra
cho bc nh cui cng. H ta c nh ngha thng qua cc ma trn chiu v ma
trn model-view
Xc nh ma trn:
Phng thc chn cc mode ma trn:
GL10.glMatrixMode(int mode)
v d
gl.glMatrixMode(GL10.GL_PROJECTION);
Chiu trc giao vi glOrthof :
GL10.glOrthof(int left, int right, int bottom, int top, int near, int far)

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 50


Hnh 1.14 [15]
OpenGL c mt h ta chun, trong trc x hng sang phi, trc y hng ln
v trc z hng v pha trc. Phng thc glOrthof() gip xc nh gc nhn ct ngang (
view frustrum) ca php chiu song song trong h ta . Mt trc ca gc nhn ct
ngang s c gn trc tip vi ca quan st (viewport). Trng hp ca quan st
(viewport) c thit lp y mn hnh, gc tri bn di ca mt trc s c gn vi
gc tri bn di ca mn hnh, gc phi bn trn ca mt trc s c gn vi gc phi
bn trn ca mn hnh. V OpenGL s t ng thc hin vic co dn ny cho ph hp vi
kch thc thit b.
Vi phng thc sau :
gl.glOrthof(0, 480, 0, 320, 1, -1);
S c gc nhn ct ngang lm vic trong khng gian 2D nh sau:
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 51



Hnh 1.15 Gc nhn ct ngang trong khng gian 2D qua php chiu song song [15]
Trc y c hng ln, v gc ta l gc di bn tri ca mn hnh. Trong khi
Canvas, UI framework, v nhiu API 2D khc dng trc y hng xung v gc gc tri
bn trn, vic dng h ta ca OpenGL ES s nhiu thun tin hn, v d nh ta mun
ta y ca nhn vt tng thay v gim khi nhn vt di chuyn ln trn.
Xc nh tam gic:
Tam gic l tp hp ca 3 im triangle
Mi im c gi l 1 nh
Mi nh c 1 v tr trong khng gian 3D
1 im trong khng gian 3D bao gm 3 s thc xc nh ta (x, y, z)
1 nh cng c th c cc thuc tnh b sung , nh mu, ta texture (texture
coordinates).

OpenGL mun cc tam gic c xc nh di dng cc mng, nhng OpenGL thc
cht l mt API vit bng C nn khng th dng mng Java thng thng c, thay vo
s s dng cc khi b nh byte lin tip.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 52

Gn kt cu cho nh ( Texture Mapping)
Vi Canvas , c th load mt vi bitmaps v v chng ln framebuffer m khng th
quay, ch c th thay i kch thc nhng cng khng linh hot. Trong OpenGL ES,ch
yu lm vic vi tam gic, c th gip nh hng v co dn ty theo mun .
Cch render nh bitmap vi OpenGL ES: ti nh bitmap ln OpenGL ES, thm cc
thuc tnh cho cc nh ca tam gic, v dng OpenGL ES render tam gic v sau
p dng nh bitmap vo tam gic.
H to kt cu (Texture Coordinates):
gn mt nh bitmap vo mt tam gic, cn dng thm ta kt cu (texture
coordinates) cho mi nh ca tam gic . N xc nh mt im trong texture ( hay trong
nh bitmap c ti) c nh x ti mt trong cc nh ca tam gic.

Hnh 1.16 H ta kt cu (texture coordinates) [15]

Mi nh c ti, khng cn quan tm n c chiu rng , di bao nhiu pixels, s
c nhng vo h ta kt cu (texture coordinates) . Gc tri bn trn lun t (0,0),
v gc di bn phi lun t ti (1,1) , thm ch chiu rng ln gp 2 chiu cao.
V d :
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 53


Hnh 1.17 Gn to kt cu cho nh bitmap [15]
Cch cp b nh v gn ta cho cc nh
int VERTEX_SIZE = (2 + 2) * 4;
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * VERTEX_SIZE);
byteBuffer.order(ByteOrder.nativeOrder());
vertices = byteBuffer.asFloatBuffer();
vertices.put( new float[] { 0.0f, 0.0f, 0.0f, 1.0f, 319.0f, 0.0f, 1.0f, 1.0f, 160.0f,
479.0f, 0.5f, 0.0f});
B nh c cp pht cho 3 nh cu tam gic, mi nh c kch thc l
VERTEX_SIZE = (2+2)*4, tc l gm hai cp ta trong h ta trong ca quan st
(viewport) v trong h ta kt cu (texture coordinate). Mi ta s dng 4 bytes
lu tr.
(0,0) , (319,0) , (160,479) l cc ta trn viewport
(0,1) , (1,1) , (0.5,0) l cc ta kt cu
Cng c th thm cc thuc tnh mu cho cc nh. D nhin cn iu chnh kch
thc b m, v d
(2 + 4 + 2) 4.
Sau cn bo cho OpenGL ES bit cc nh c ta kt cu s dng phng
thc glEnableClientState() v phng thc glTexCoordPointer().

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 54

Ti nh bitmap:
Trc ht cn ti nh bitmap:
Bitmap bitmap =
BitmapFactory.decodeStream(game.getFileIO().readAsset("doraemon.jpg"));
Tip theo ta cn thng bo vi OpenGL ES rng cn to ra 1 texture mi. to 1 i
tng texture, ta gi phn thc di y:
GL10.glGenTextures(int numTextures, int[] ids, int offset)
OpenGL ES l 1 API vit bng C. N khng th tr v mt i tng Java cho
texture mi; thay vo , n cung cp cho mt ID. Mi ln mun dng OpenGL ES lm
g vi texture s s dng ID ca n.
int textureIds[] = new int[1];
gl.glGenTextures(1, textureIds, 0);
int textureId = textureIds[0];
i tng Texture vn cn trng, vn cha c d liu nh (image), cn phi gn nh
bitmap c ti ln i tng Texture va to ra. Trc ht cn phi bind i
tng texture. bind mt ci g trong OpenGL ES ngha l ta mun OpenGL ES
s dng i tng c th cho cc phng thc gi tip sau cho ti khi ta thay i li
bind
Cch gn bitmap ln i tng texture mi:
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
Hy i tng Texture :
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 55

S rt hu ch nu xa cc i tng texture t video RAM khi khng cn s dng
(ging nh dng Bitmap.recycle() gii phng b nh cho bitmap). OpenGL ES cung
cp phng thc sau xa i tng Texture:
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
int textureIds = { textureid };
gl.glDeleteTextures(1, textureIds, 0);
Kch hot Texture :
Cn mt iu cn hon thnh trc khi c th v tam gic vi texture: thng bo cho
OpenGL ES bit rng texture c p dng cho mi tam gic
GL10.glEnable(GL10.GL_TEXTURE_2D);
V cng c th v hiu ha Texture bng phng thc:
GL10.glDisable(GL10.GL_TEXTURE_2D);
iu ny tng t nh khi kch hot hay v hiu ha (enabled/disabled) thuc tnh
ca cc nh (vertex) dng cc phng thc:
glEnableClientState()
glDisableClientState().
Tm tt cc bc v mt nh bitmap vi OpenGL ES:
Cp b nh cho cc nh
Thm thuc tnh cho cc nh : ta , mu
Ti nh bitmap, to i tng Texture
Bo cho OpenGL Texture c kch hot
Bind i tng Texture va c to ra.
Kch hot thuc tnh ca cc nh
c v tr cc nh cho OpenGL
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 56

V
Ch s ca nh ( S dng li nh):
Vi l thuyt trn, mi ch c th v c mt phn hnh tam gic ca nh bitmap.
v mt bitmap hon chnh, cn s dng hai tam gic, ng ngha vi vic phi s dng
su nh cho mt nh bitmap.

Hnh 1.18 S dng li nh [15]
Nh thy trn hnh, vic s dng su nh l tha khi hai tam gic c chung hai
nh. Nh vy s ch cn dng bn nh v1, v2, v3, v4. xc nh cc tam gic th mi
nh cn c ch s ring. OpenGL mun cc ch s c kiu Short:
short[] indices = { 0, 1, 2,2, 3, 0 };
Vic dng thm ch s cho cc nh cng yu cu cp thm b nh lu tr:
ByteBuffer byteBuffer = ByteBuffer.allocate(indices.length * 2);
byteBuffer.order(ByteOrder.nativeOrder());
ShortBuffer shortBuffer = byteBuffer.asShortBuffer();
shortBuffer.put(indices);
shortBuffer.flip();
shortBuffer.put(indices);

Trn (Alpha Blending)
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 57

Chc nng trn trong OpenGL c kch hot bi phng thc
gl.glEnable(GL10.GL_BLEND);
Phng thc chn kiu trn : glBlendFunc() . V d :
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
Tuy nhin vic s dng trn cng nn cn trng, khng nn lm dng, ch s dng khi
cn thit v b x l ha (GPU) ca cc in thoi khng phi u x l tt vic trn
s lng ln im nh.
Cc mu khc trong OpenGL ES
c coi l mt b my lm vic vi cc hnh tam gic, nhng bn cnh OpenGL
ES cn c nhiu mu khc nh : im (Point), dng (Line), di ( Strip)

Hnh 1.19 Cc mu trong OpenGL ES [15]

Chuyn ng 2D trong OpenGL ES
Trong phn trc nh ngha c nhng hnh hc tnh, cha c di chuyn, quay
hay co dn. Cc nh vn gi nguyn v tr trong khng gian.
Gc nhn ct ngang ( View Frustrum) c t trong mt h ta c bit gi l
world space.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 58


Hnh 1.20 H ta world space [15]
V tr ca cc nh c xc nh mt cch tuyt i so vi gc trong h ta
world space . iu cn thit l xc nh v tr cc nh c lp vi h ta world
space. iu ny c thc hin bng cch s dng mt h ta ring cho cc nh
ca cc mu trong world space, gi l model space.

Hnh 1.21 world space v model space[15]
C mt kiu ma trn khc a cc mu ti v tr bt k trong world space l ma
trn model-view
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 59

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(200, 300, 0);
vertices.draw(GL10.GL_TRIANGLES, 0, 6);
Phng thc glTranslatef() s di chuyn cc nh trc khi c chiu bi ma trn
chiu.
Bn cnh phng thc glTranslatef(), OpenGL ES cng cung cp hai phng thc h
tr cho vic chuyn i khc l quay v co dn mu : glRotatef() and glScalef().
V d:
glTranslatef(doraemon.x,doraemon.y, 0);
glRotatef(45, 0, 0, 1);
glScalef(2, 0.5f, 1);

Hnh 1.22 Quay mu 45 [15]
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 60


Hnh 1.23 Mu c dn 2 ln theo trc x v co mt na theo trc y [15]

Khi mun kt hp c hai phng thc quay v co dn th phng thc quay cn c
gi trc.











Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 61


CHNG II. XY DNG FRAMEWORK
Vi nhng l thuyt trong chng 1, chng 2 ca n s trnh by phn xy
dng mt framework c bn cho pht trin game trn in thoi thng minh. Ni dung
ca chng ny s i t vic xy dng cc m-un chnh nh : m thanh, ha, vo ra
File, nhn u vo, n vic kt hp cc m-un ny thnh mt framework , sau l
nhng phn b sung framework hon chnh hn nh qun l va chm trong Game, ti
u b nh,. Tt c cc m-un u c thc hin theo hng xy dng cc giao din
(interface) trc, sau l phn thc hin cc giao din (implementation). Phn u tin
ca chng III s trnh by m-un u tin: m thanh.
2.1 Vo ra file
i vi mt Framework th vic x l file l mt thnh phn bt buc cho php chng
ta c d liu ln chun b chy game hoc cho php chng ta lu li nhng thnh
phn quan trng nh im cao, setting game
u tin chng ta xy dng interface ca n bao gm 4 thnh phn nh sau:
InputStream readAsset(String fileName)
InputStream readFile(String fileName)
OutputStream writeFile(String fileName)
SharedPreferences getPreferences()
Trong hm u tin cho php chng ta c file t th mc Assets nh cc file nh
nn, nh nhn vt, m thanh hay nhc nn vi u vo l tn file v tr v l mt lung
InputStream.
Hm th hai cho php chng ta c file (trong game thng l file setting) t b nh
ngoi vi u vo cng l tn file v tr v mt lung InputStream.
Hm th ba cho php chng ta ghi file vo b nh ngoi vi u vo l tn file v tr
v mt lung OutputStream.
Hm th t cho php chng ta ly i tng b lu tr tm thi tng ng vi lp
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 62

Sau khi xy dng xong interface ta tin n bc hai l xy dng lp implement
interface trn. Kt hp vi nhng l thuyt ni phn x l file trc ta xy dng
lp AndroidFileIO bao gm nhng thnh phn sau:
AndroidFileIO(Context context): y l constructor ca lp dng gn cc gi
tr ban u cho cc thuc tnh ca lp.
readAsset(String fileName): Hm ny tr v i tng InputStream bng cch gi
hm assets.open(fileName).
readFile(String fileName): Tng t hm ny cng tr v i tng InputStream
bng cch gi new FileInputStream(externalStoragePath + fileName). Trong th
externamStoragePath l ng dn n b nh ngoi.
writeFile(String fileName): Hm ny tr v di tng OutputStream bng cch gi
tng t nh trn nhng l FileOutputStream.
getPreferences(): Hm ny tr v i tng SharedPreferences tng ng vi
Activity bng cch gi PreferenceManager.getDefaultSharedPrederences(context)
Phn xy dng module x l file kh d hiu. n gin l chng ta xy dng interface
ri implement n. Module x l file ny s c ng dng trong cc lp Game, Setting
ca Framework.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 63


Hnh 2.1 S lp m-un vo ra file
2.2 Input
Nh phn l thuyt ni chng trc trong module Input s x l cm bin gia
tc, s kin t bn phm, n chm, a chm. Cc bc x l cng tng t nh cc
phn khc l ta s xy dng cc interface ri xy dng cc lp implement n. Tuy nhin
x l trong cc lp th chng ta s c mt vi lp b tr v cui cng l lp
AndroidInput s x l ton b cc s kin u vo.
2.2.1 Cm bin gia tc
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 64

Lp cm bin gia tc th ta tin hnh implement interface ca Android l
SensorEventListener. Lp ny gm nhng hm sau:
AccelerometerHandler(Context context): Hm ny l constructor ca lp dng
khi to cc gi tr ban u cho cc thuc tnh.
onAccuracyChanged(Sensor sensor, int accuracy): Nh ni chng trc th
hm ny chng ta khng dng nn khng lm g c.
onSensorChanged(SensorEvent event): Hm ny xy ra khi chng ta nghing my
in thoi theo bt c hng no. Trong hm ny chng ta s ly gi tr gia tc theo cc
hng X,Y,Z.
getAccelX(), getAccelY(), getAccelZ(): Ba hm ny n gin l tr v cc gi tr
gia tc theo cc hng X,Y,Z. Vic ly cc gi tr ny nhm nh gi xem chng ta
nghing my theo hng no c nhng s kin xy ra. V d nh l nghing th nhn
vt ca ta s di duyn theo hng chng hn.
2.2.2 Lp Pool
ng ra chng ta phi xy dng lp n chm v a chm tip theo tuy nhin trong
hai lp ny hay trong framework chng ta s phi s dng mt lp cc k quan trng
l lp Pool. Lp Pool nhim v ca n l g???
Khi chng ta to ra lp v a chm hay n chm th khi chng ta chm vo mn
hnh th c th hiu rng chng ta to ra mt i tng ca lp. M qu trnh chm
vo mn hnh li thng xuyn xy ra vi mt ln s ko theo s lng i tng cc
ln trong thi gian ngn. Trong trng hp ny th b thu dn rc t ng ca Android s
hy tt c cc i tng ca cng mt lp m sinh ra trong thi gian ngn m cc i
tng ny chng ta li ang cn dng n x l. Chnh v vy trnh iu th
chng ta thay v to ra cc i tng mi th chng ta s ti s dng li nhng i tng
khng cn c s dng na. chnh l nhim v ca lp Pool N gip chng ta
x l khi c nhiu thao tc chm m cng khng lm trn b nh.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 65

Trc ht nh mi khi chng ta s c interface trc c tn l
PoolObjectFactory<T> gm mt hm duy nht l createObject() hm ny tr v i
tng T l i tng m chng ta mun ti s dng.
Tip theo chng ta s xy dng lp Pool gm constructor, mt lp con newObject()
v mt hm free(T object). Trong constructor khi to gi tr ban u cho cc thuc
tnh v thit lp gi tr s i tng ti a m chng ta mun sinh ra. Lp con
newObject() chnh l lp x l chng ta c c mt i tng mi nhng thc ta ch
l s dng li bng cch dng mt phng thc ca lp List l remove ngoi nhim v
xa i tng n cn tr v chnh i tng b xa trong List. Cn hm duy nht free th
thc cht nh hm add ca List cho php thm i tng nu m danh sch cha qu s
lng i tng cho php. Tuy nhin c mt im khc l i tng c thm vo l
i tng khng cn c s dng ch khng phi l i tng mi c to.
2.2.3 X l s kin t bn phm
Lp ny c mt s yu cu. Th nht l phi kt ni vi View khi chm vo View
th s nhn c c s kin t bn phm. Th hai l phi lu tr mt danh sch cc s
kin t bn phm lm u vo cho lp input. Cui cng l phi ng b ha v n s
nhn c cc s kin trn lung UI nhng li thc hin trn mt lung khc.
Lp KeyboardHandler (x l s kin t bn phm) ca chng ta s implement
interface OnKeyListener (y chnh l yu cu th nht cho chng ta nhn s kin t
View). Lp ny gm 4 thuc tnh chnh:
Th nht (pressedKeys) mt dy 128 phn t Boolean lu cc trng thi c
n hay khng c n ca mi phm trn bn phm (yu cu th hai). Mi phm trn bn
phm c ch s ha bi Keycode tng ng vi cc hng s trong lp view
KeyEvent.KEYCODE_XXX
Th hai (keyEventPool) l mt i tng ca lp Pool dng gi nhng i
tng sinh ra khi chng ta chm vo mi phm v chng ta s ti s dng chng.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 66

Th ba (keyEventsBuffer) l mt ArrayList cha cc i tng ging Pool trn
nhng l nhng i tng m game cha s dng. Mi ln chng to ra mt i tng
mi th chng ta s add n vo y.
Cui cng (keyEvents) cng l mt ArrayList ch dng cho hm getKeyEvent() (s
ni phn di) khi n tr v gi tr l mt ArrayList.
Tip theo l cc hm ca lp ny. N gm 4 hm:
KeyboardHandler(View view): Hm ny l constructor ca lp dng nhn
KeyEvent khi chng ta chm vo view. Ngoi ra cn to i tng Pool cng vi
thuc tnh gii hn ca n.
onKey(View v, int keyCode, android.view.KeyEvent event): Hm ny c gi mi
ln View nhn c KeyEvent. Trong hm ny chng ta s khi to KeyEvent bng Pool
sau gn cc thuc tnh keyCode, keyChar v trng thi ca KeyEvent tng ng.
isKeyPressed(int keyCode): Hm ny dng kim tra xem l phm c c n
gi hay khng? Nhng trc ht chng ta phi kim tra xem l keyCode u vo c hp
l hay khng c ngha l phi nm trong khong 0 n 127.
getKeyEvents(): Hm ny dng ly nhng KeyEvent c nhp vo.
Phn ny hi kh hiu nn chng ti xin gii thch thm theo v d nh sau:
- KeyEvent th nht xy ra th
Lung UI: onKey() keyEvents={}, keyEventsBuffer= {key1},pool={}
Lung chnh: getKeyEvents() keyEvents={key1}, keyEventsBuffer={},
pool={}.
- KeyEvent th hai xy ra
Lung UI: onKey() keyEvents={key1}, keyEventsBuffer={key2}, pool={}
Lung chnh: getKeyEvents() keyEvents={key2}, keyEventsBuffer={}, pool
= {key1}
Trong th lung UI lun l lung nhn s kin mi cn lung chnh l lung ly
cc s kin bn phm. Khi xy ra s kin th nht lung UI th lc keyEvents v
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 67

Pool s rng cn keyEventsBuffer s c mt phn t l key1 c add vo trong hm
onKey(). Tip theo khi lung chnh gi hm getKeyEvents() th lc Pool ly phn t
ca keyEvents nhng m n khng c phn t no ri keyEvents s ly key1 t
keyEventsBuffer v clear() lun keyEventsBuffer thnh rng.
Khi xy ra s kin th hai th lc lung UI keyEvents c mt phn t l key1 cn
keyEventsBuffer s c add phn t key2 cn pool th vn rng. Tip theo l khi
lung chnh gi hm getKeyEvents() th lc pool s ly key1 t keyEvents cn
keyEvents s add phn t key2 vo t keyEventsBuffer v keyEventsBuffer li rng.
2.2.4 X l chm
Cng ging nh vic xy dng nhng lp khc th chng ta cng xy dng interface
trc. Nhng hai lp chng ta x l tng i ging nhau v cc hm nn ta xy dng
mt interface cho hai lp ny gi l TouchHandler.
Giao din TouchHandler s k tha giao din OnTouchListener v n chm hay a
chm u phi implement cc hm ca giao din ny. Ngoi ra chng ta cn c bn hm
khc:
isTouchDown(int pointer): Hm ny kim tra xem thao tc chm tng ng vi
ch s pointer c phi l thao tc chm xung hay khng?
getTouchX(int pointer): Hm ny ly ta theo trc honh ca im chm tng
ng.
getTouchY(int pointer): Hm ny cng tng t hm trn l ly ta theo trc
tung ca im chm tng ng.
getTouchEvents(): Hm ny ly danh sch s kin lm u vo x l.
2.2.4.1 Lp n chm
Lp ny s implement giao din TouchHanler nn n s phi thc hin cc hm ca
giao din OnTouchListener v bn hm do chng ta nh ngha. Cn v cc i tng ca
lp ny th cng nh chng ta xy dng i vi lp s kin t bn phm th chng ta
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 68

c ba i tng chnh l i tng touchEventPool, touchEvents, touchEventsBuffer. V
cc hm ca lp ny th chng ta c nhng hm sau y:
SingleTouchHandler(View view,float scaleX, float scaleY): Hm ny l
constructor ca lp. Trong ny nh vi lp s kin t bn phm n dng khi to Pool
vi thuc tnh ca Pool ng thi cho php nhn s kin khi chm vo View.
onTouch(View v,MotionEvent event): Hm ny c gi mi khi c s kin chm
xy ra vi View. Trong hm ny chng ta s gn cc gi tr cho thuc tnh ca i tng
touchEvent nh x, y, isTouched ri lu i tng touchEvent vo dy touchEventsBuffer.
isTouchDown(int pointer): Hm ny n gin kim tra vic chm xung nh
trn chng ti ni.
getTouchX, getTouchY: Hai hm ny dng ly ta ca im chm.
getTouchEvents(): Hm ny tng t nh lp s kin t bn phm dng i
tng Pool ti s dng li nhng i tng khng c s dng na. Kt qu cui
cng tr v s l mt dy cc s kin u vo tuy nhin nhng phn t trong khng
phi l to mi m l s dng li.
2.2.4.2 a chm
X l a chm gn ging vi n chm ch khc mt s i tng chng ta chuyn
sang dng dy gm nhiu i tng . Lp a chm ny vn gm ba i tng chnh l
touchEventPool, touchEvents, touchEventsBuffer v su hm (khc n chm l c mt
hm mi):
MultiTouchHandler(View view,float scaleX, float scaleY): Hm ny l constructor
ca lp. Trong ny nh vi lp s kin t bn phm n dng khi to Pool vi thuc
tnh ca Pool ng thi cho php nhn s kin khi chm vo View.
onTouch(View v,MotionEvent event): Hm ny c gi mi khi c s kin chm
xy ra vi View. Trong hm ny chng ta s gn cc gi tr cho thuc tnh ca i tng
touchEvent nh x, y, isTouched ri lu i tng touchEvent vo dy touchEventsBuffer.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 69

Ch l chng ta phi thm mt vng for u cc thao tc x l ny cho php chy t
u n cui tt c cc thao tc chm trong danh sch.
isTouchDown(int pointer): Hm ny n gin kim tra vic chm xung nhng
cng phi dng vng for kim tra tt c cc phn t.
getTouchX, getTouchY: Hai hm ny dng ly ta ca im chm.
getTouchEvents(): Hm ny tng t nh lp n chm dng i tng Pool
ti s dng li nhng i tng khng c s dng na. Kt qu cui cng tr v s
l mt dy cc s kin u vo tuy nhin nhng phn t trong khng phi l to mi
m l s dng li
getIndex(int pointerID): y l hm m lp n chm khng c. Hm ny dng
tm index tng ng vi tng thao tc chm hay pointerID (trong a chm c nhiu
thao tc n chm xy ra)
2.2.5 AndroidInput
phn u chng ta ni n lp cui cng l lp AndroidInput lp ny s x l
ton b cc d liu u vo ca chng ta t nhng module chng ta va xy dng.
u tin chng ta xy dng interface trc. Interface ny tn l Input s c nhng
hm nh isKeyPressed(), isTouchDown(), getTouchX(), getTouchY(), getAccelX(),
getAccelY(), getAccelZ(), getKeyEvents(), getTouchEvents(). Ngoi ra cn c hai lp:
KeyEvent: Lp ny nh ngha mt s kin t bn phm s gm nhng thuc tnh
nh keyCode, keyChar, type.
TouchEvent: Tng t nh lp trn th lp ny nh ngha mt thao tc chm gm
nhng thuc tnh nh type, x, y, pointer.
Tip theo chng ta s xy dng lp AndroidInput bng cch implement interface
Input.
Trong lp AndroidInput chng ta s qun l ba thnh phn l Gia tc, s kin t bn
phm v s kin chm. Cc hm trong lp ny gm c:
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 70

AndroidInput(Context context, View view, float scaleX, float scaleY): Hm ny l
hm khi to ca lp. Trong hm ny s khi to cc i tng gia tc, s kin t bn
phm, s kin chm. Gia tc c u vo chnh l context cn s kin t bn phm c u
vo l view. Cui cng l s kin chm th chng ta phi xt Version ca my nu nh
hn 5 th s ch c n chm cn t 5 tr ln th s c a chm.
isKeyPressed(int keyCode): Hm ny tng ng tr v
keyHandler.isKeyPressed(keyCode)
isTouchDown(int pointer): Hm ny s tr v tng ng
touchHandler.isTouchDown(pointer)
getTouchX(), getTouchY(): Hai hm ny tng ng vi hai hm getTouchX() v
getTouchY() trong lp TouchHandler.
getAccelX(), getAccelY(), getAccelZ(): Ba hm ny tng ng vi cc hm ly gia
tc theo cc hng trong lp AccelHandler.
getTouchEvents(): Hm ny tng ng vi hm trong lp TouchHandler
getKeyEvents(): Hm ny tng ng vi hm getKeyEvents() trong lp
KeyHandler.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 71


Hnh 2.2 S lp m-un input
2.3 M-un m thanh (Audio)
Da trn chc nng xc nh trong chng 1, m-un m thanh s c xy dng
gm 3 giao din : giao din Audio s thc hin vic to ra cc thc th ca giao din
Sound v cc thc th ca giao din Music. Mt thc th Music s thc hin vic pht
trc tip file m thanh t a trong khi thc th Sound s pht cc m hiu ng c ti
hon ton ln b nh.
Giao din Audio s gm hai phng thc newSound() v newMusic(), c hai u
c truyn vo tham s l tn ca file m thanh, cc file m thanh ny nm trong file
APK ca ng dng. Giao din Music i din cho cc thc th Music s gm cc phng
thc bt u pht cc file nhc, tm dng hay kt thc pht nhc, ngoi ra cn cc hm
thit lp vic lp li v m lng nhc. Giao din Sound n gin hn, ch gm phng
thc pht m thanh, v gii phng n khi khng cn s dng gii phng b nh.
Cc giao din sau khi xc nh c cc hm chc nng s c thc thi bi cc lp :
AndroidAudio, AndroidMusic, AndoidSound.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 72



Hnh 2.3 S lp m-un m thanh
Lp AndroidAudio thc thi giao dn Audio, gm c hai thc th AssetManager v
SoundPool. AssetManager s cn thit cho vic ti cc file m thanh hiu ng vo
SoundPool. Hm to ca AndroidAudio s cho php iu chnh m lng ca dng m
thanh, to mt thc th AssetManager v SoundPool. SoundPool c cu hnh c th
chi cng lc 20 tp m thanh hiu ng. Hm newMusic() s tr v mt thc th
AndroidMusic. Hm newSound() s ti tp m thanh hiu ng vo SoundPool v tr v
mt thc th AndroidSound.
Lp AndroidSound thc thi giao din Sound, lu tr SoundPool v cc ch s ID
dng cho vic pht hay gii phng m thanh trong cc hm tng ng play() v dispose().
Lp AndroidMusic thc thi giao din Music. Lp ny lu mt thc th MediaPlayer
dng cho vic pht m thanh trc tip t a thay v t b nh nh vic pht cc tp m
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 73

hiu ng. N cng lu mt bin Boolean kim tra thc th MediaPlayer c
chun b cha hay theo di trng thi ca MediaPlayer. Hm to ca AndroidMusic s
to ra mt thc th MediaPlayer. Cc hm play(), pause(), stop(), dispose() thc hin cc
vic tng ng pht, tm dng, kt thc pht MediaPlayer, v gii phng MediaPlayer.
Cc hm isLooping(), isPlaying(), isStopped() s tr v trng thi ca MediaPlayer.
2.4 M-un ha
ha trong Framework s s dng OpenGL ES lp trnh. Vn t ra l cn c
mt kiu i tng View cho php dng hnh thng qua OpenGL ES. API ca Android
c cung cp mt kiu View thch hp l GLSurfaceView, mt k tha ca lp
SurfaceView. GLSurfaceView s tr v mt i tng GL10 phc v cho vic dng hnh.
M-un ha s bt u t vic xy dng mt lp o Graphics. Lp ny s lu tr mt
i tng GLSurfaceView v mt i tng GL10. Cc phng thc tru tng gm
thit lp v ly i tng GL10 : getGL(), v setGL(), cng hai phng thc ly v chiu
di v chiu rng ca i tng GLSurfaceView trong n v pixel. Lp GLGraphics k
tha lp Graphics s thc thi cc phng thc tru tng nh trn. Cc hm dng hnh
s khng c vit trong lp GLGraphics v vic dng hnh vi OpenGL ES l kh phc
tp, n s c vit trong cc lp thnh vin.
Cc lp thnh vin h tr vic dng hnh qua OpenGL ES gm cc lp : Texture,
Vertices, Camera2D, TextureRegion, Font, Animation v SpriteBatcher.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 74


Hnh 2.4 S lp m-un ha
Lp Camera2D :
Nh cp trong chng 1, OpenGL ES c mt h ta gi l world space, l
ni m th gii trong Game s din ra. iu cn thit t ra l cn c mt Camera xc
nh khong khng gian s c dng hnh ln mn hnh. Lp Camera s to ra mt i
tng Camera thc hin nhim v ny, ng thi cng xc nh kch thc mn hnh ca
thit b s c s dng dng hnh.
Lp ny s lu tr v tr ca Camera (v tr ny l tm ca Camera, chiu di v rng
khong khng gian trong world space s c hin th ln mn hnh, mt h s thu
phng Camera, ng thi cng lu tr mt tham chiu n GLGraphics cp nht chiu
di, chiu rng ca mn hnh thit b, phc v cho vic chuyn i ta u vo ca
ngi dng khi chm mn hnh sang ta trong world space.
C hai hm chnh trong lp Camera2D. Hm setViewportAndMatrics() thc hin
vic thit lp khong khng gian trong world space c dng ln mn hnh, v kch
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 75

thc mn hnh s c dng cho vic dng hnh ny. Hm touchToWorld() thc hin
vic chuyn i ta nh ni trn.
Lp Vertices :
Lp Vertices c to ra vi mc ch lu tr s lng ti a cc nh cng nh ch
s ca cc nh phc v cho vic dng hnh. N cng theo di bt cc trng thi khi cn
cho vic dng hnh v xa cc trng thi khi dng hnh xong.
Lp Vertices gi mt tham chiu n mt thc th GLGraphics c th ly v cc
thuc tnh ca thc th GL10 khi cn thit. N cng cha hai bin Boolean cho ngi
dng linh hot trong vic s dng cc thuc tnh mu v ta ca cc nh, ng thi
cha mt b m FloatBuffer cho vic lu cc nh v mt b m ShortBuffer cho vic
lu cc ch s ca nh.
Hm to Vertices da vo s lng nh v ch s xc nh kch thc cho b m,
khi to b m. Hai hm setVertices() v setIndices() c chc nng xa b m v sao
ni dung ca cc mng c truyn vo b m.
Hm cui cng l hm draw(). Ph thuc vo nh c thuc tnh mu hay ta
khng m hm ny bt cc trng thi c lin quan ca OpenGL ES bo cho OpenGL
ES tm d liu. Ty thuc vo ch s nh c c s dng hay khng, hm s gi cc
hm glDrawElements() hoc glDrawArrays() cng cc tham s truyn vo. V sau khi v
xong, hm glDisableClientState() s c gi xa cc trng thi ca OpenGL phc v
cho vic v mt thc th Vertices khc.
Lp Texture
Lp Texture thc hin vic ti nh bitmap v to ra mt i tng Texture. N c mt
s phng thc cho vic bind (to rng buc) i tng texture v gii phng i
tng ny.
Lp Texture s cha mt tham chiu n mt thc th ca GLGraphics ly v thc
th GL10 khi cn thit, v mt tham chiu n thc th FileIO thc hin ti nh
bitmap.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 76

Hm load() trong lp Texture s thc hin ti nh bitmap, to ra mt i tng texture
v gn d liu bitmap ln i tng texture va to ra. Hm reload() s gi li hm
load() , thc hin vic bind cho i tng texture va to ra trong hm load(). Hm
bind() s thc hin vic to rng buc, v hm dispose() s xa i tng texture khi b
nh video RAM khi khng cn s dng. i tng texture ch c th xa khi khng cn
rng buc.
Lp TextureRegion
Khi ti nh bitmap cho cc i tng texture, gim s ln phi ti cugnx nh s i
tng texture phi to ra, cc hnh nh bitmap nn c ghp cng nhau thnh mt nh
bitmap, v ch cn ti mt ln, hay cn gi l texture atlas (tp cc texture). Mi texture
nm trong texture atlas c i din bng mt Texture region.
Lp TextureRegion c nhim v chuyn i ta im nh ca mt vng trong tp
cc texture (texture atlas) sang ta kt cu, phc v cho vic dng hnh. Lp ny s
lu tr ta kt cu ca gc tri bn trn, v gc phi bn di ca vng trong tp cc
texture (texture atlas).

Lp Animation
Mt Animation s c nhiu khung hnh, mi khung l mt i tng TextureRegion,
lu v tr ca khung hnh trong tp cc texture. Animation cng lu mt bin thi lng
cho mi khung. Animation s xc nh cc trng thi theo thi gian tr v khung hnh
hin ti dng hnh. Animation cng c th c thit lp lp li hoc dng khung
hnh cui cng.
Lp Animation c hai hng thit lp kiu cho Animation lp li hay dng khi chy
ht cc khung, nh ngha mt mng lu cc i tng TextureRegion, v mt s thc
lu thi lng cho mi khung hnh. Phng thc getFrame() ly v khung hnh s
c dng.

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 77

Lp SpriteBatcher
Lp SpriteBatcher cho php gi nhiu phng thc dng hnh trong mt ln gi duy
nht.iu ny s gip cho n v x l ha (GPU) lm vic tt hn.
Spritebatcher c mt b m c khi to rng lu cc nh, n l mt b m s
thc. Khi phng thc SpriteBatcher.drawSprite() c gi, bn nh ca i tng c
v s c thm vo b m da trn cc tham s c truyn vo : v tr , kch
thc,hng v texture region. Sau khi cc i tng c v c thit lp qua cc
phng thc drawSprite(), SpriteBatcher s xc nhn cc nh ca cc i tng ny ti
b x l ha (GPU) trong cng mt ln v gi phng thc v ca OpenGL ES
dng hnh cho cc i tng ny.
Lp SpriteBatcher cha mt mng s thc verticesBuffer lu tr cc nh, mt
bin ch s bufferIndex xc nh v tr bt u cho cc nh tip theo c vit vo
mng, mt thc th Vertices phc v cho vic dng hnh v mt bin numSprites ch
s i tng c dng hnh.
Hm to ca SpriteBatcher s khi to mt thc th Vertices t hai tham s truyn
vo l thc th GLGraphics v s lng ti a cc i tng (maxSprites). ng thi
thit lp ch s nh cho thc th Vertices. Hm beginBatch() s t rng buc cho i
tng c truyn vo. Hm drawSprite() s tnh ton v thm cc nh ca i tng
c dng hnh vo b m verticesBuffer. Cui cng l hm endBatch(), hm ny s
truyn cc nh t b m vo thc th Vertices v gi hm Vertices.draw() dng hnh.
Cc hm drawSprite() phi c t gia hm beginBatch() v hm endBatch().
Lp Font
Lp Font gip thc hin vic vit ch trong Game t mt nh bitmap cha mt b
font.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 78


Hnh 2.5 nh bitmap font
Lp Font cha mt i tng texture m cha nh bitmap font, cc bin lu chiu di,
rng cu mi k t trong bitmap font v mt mng cc i tng TextureRegion lu
texture region ca cc k t. Hm to ca lp s tnh ton v tr v thm vo mng cc i
tng TextureRegion tng ng vi cc k t. Cui cng l hm drawText() s v chui
k t String c truyn vo thng qua thc th SpiteBatcher.
2.5 Game Framework
Sau khi hon thnh cc m-un chnh, cn c mt phn tng hp li cc m-un v
thc hin cc chc nng chnh ca Game:
Game s c cc mang hnh (cnh), mi mn hnh thc hin cc nhim v nh
nhau : x l u vo t ngi dng, dng cnh.
Cc mn hnh c qun l , theo di trng thi chuyn qua cc mn hnh khc
khi cn thit.
Cc mn hnh c quyn truy cp vo cc m-un nn tng xy dng : Audio,
Input, FileIO, Graphics.
Cc mn hnh c cp nht v dng hnh trong mt vng lp, mi ln lp l mt
khung frame.
Game s thit lp mt ca s v mt thnh phn giao din ngi dng (UI)
dng hnh v nhn u vo ca ngi dng.
Game s theo di trng thi ca ca s (khi c cc s kin n) v thng bo cho
mang hnh hin ti.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 79

Sau khi xy dng phn ny th v c bn Framework c hon thnh. Phn ny s
bt u t vic xy dng giao din v sau l phn thc thi giao din.
2.5.1 Xy dng phn giao din
Giao din Game : gm c mt s phng thc ly v cc thc th ca cc m-
un nn tng nh : getAudio(), getInput(), getFileIO(), getGraphics(). Cc thc th ny s
c khi to v theo di trong lp thc thi ca giao din Game. Phng thc
Game.setScreen() cho php thit lp mn hnh hin ti cho Game. Phng thc
Game.getCurrentScreen() cho php ly v mn hnh hin ti ca Game. Phng thc
Game.getStartScreen() s c dng tr v mn hnh bt u cho Game m ngi
dng mun.
Lp tru tng Screen (mn hnh hay cc cnh ca Game) : Screen c xy dng
l mt lp tru tng. N cha mt thc th Game gip truy cp vo cc M-un nn
tng pht m thanh, dng hnh, nhn u vo t ngi dng, c ghi file, hay c th
thit lp mt cnh khc qua phng thc Game.setScreen(). Hai phng thc
Screen.update() v Screen.present() s thc hin cp nht v thc hin dng hnh cho
cnh . Hai phng thc ny s c gi trong mi vng lp ca vng lp chnh trong
Game. Cc phng thc Screen.pause() v Screen.resume() s c gi khi Game c
dng hay tip tc. Phng thc Screen.dispose() c gi khi hm Game.setScreen()
c gi xa cnh hin ti, gii phng ti nguyn cho cnh mi.
2.5.2 Thc thi giao din Game v lp tru tng Screen
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 80


Hnh 2.6 Thc th giao din Game v lp Screen
2.5.2.1 Lp GLScreen
Lp ny k tha lp tru tng Screen, lu tr cc mt thc th GLGame v mt
thc th GLGraphics phc v cho vic dng hnh. Tham s truyn vo hm to l mt
thc th Game.
2.5.2.2 Lp GLGame thc thi giao din Game:
Giao din GLSurfaceView.Renderer :
Nh cp trong chng 1, Game cn mt kiu i tng View cho php dng
hnh thng qua OpenGL ES. Android API cung cp mt kiu View cho php thc hin
iu ny l GLSurfaceView. Ngoi mt lung chnh gi l UI thread (lung giao din
ngi dng) thi Game cng cn c mt lung ring r khc thc hin dng hnh cho
cc cnh. GlSurfaceView thit lp mt lung thc hin chc nng ny, vic cn lm l
thc thi giao din listener GLSurfaceView.Renderer v ng k vi GLSurfaceView.
Giao din ny c 3 phng thc chnh :
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 81

Phng thc onSurfaceCreated(): s c gi mi khi GLSurfaceView c to,
xy ra khi ln u Activity c khi to hay Activity tip tc t mt trng thi dng.
Trong hm ny thng dng ci t cc texture
Phng thc onSurfaceChanged(): c gi khi b mt thay i kch thc
Phng thc onDrawFrame(): l phng thc s thc hin mi tc v dng hnh.
N c gi thng xuyn bi lung m GLSurfaceView to ra.

Cc phng thc GLSurfaceView.onPause()/onResume() cng s c goi trong cc
hm onPause() / onResume ca Activity. GLSurfaceView s bt u lung thc hin
dng hnh trong phng thc onResume() ca n, v kt thc lung ny trong phng
thc onPause(), ngha l b lng nghe listener s khng c gi khi Activity trng
thi dng, khi lung dng hnh cng b dng.
Lp GLGame thc thi ca giao din Game:
Lp GLGame s k tha lp Activity v thc thi hai giao din Game v
GLSurfaceView.Renderer . N c mt enum theo di cc trng thi ca thc th
GLGame. Cc thnh phn ca class gm mt thc th GLSurfaceView v mt thc th
GLGraphics v cc thc th ca cc m-un nn tng nh : Audio, Input, FileIO, Screen.
Mt bin kiu Object s dng ng b lung UI v lung dng hnh
Trong hm onCreate() s thc hin vic thit lp Activity chim ton b mn hnh,
khi to thc th GLSurfaceView v ci t n cho ni dung ca View. ng thi khi
to cc thc th AndroidAudio, AndroidInput, AndroidFileIO, GlGraphics.
Trong hm onResume() , GLSurfaceView s bt u lung dng hnh qua vic gi
hm onResume() ca n.
Phng thc onSurfaceCreate() s c gi k tip. Nu Activity c khi to ln
u,trng thi ca Game l GLGameState.Initialized, phng thc getStartScreen() s
c gi tr v mn hnh bt u cho Game, trng hp khc trng thi s c thit
lp l GLGameState.Running, phng thc screen.resume() s c gi. Phng thc
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 82

ny cng theo di thi gian hin ti (thi gian bt u) ca h thng tnh deltatime
dng trong vic dng hnh cc hm pha sau.
Phng thc onSurfaceChanged() thng khng s dng n.
Phng thc onDrawFrame() l hm thc hin cng vic chnh. Phng thc ny s
c gi nhiu nht c th bi lung dng hnh. Trong phng thc ny, trng thi ca
Game s c kim tra x l nhng vic ph hp. Nu Game ang chy, deltaTime
s c tnh v cc hm Screen.update() v Screen.present() ca mn hnh hin ti s
c gi. Nu Game c dng, mn hnh hin ti s dng, trng thi Game chuyn sang
GLGameState.Idle, ng thi thng bo cho lung UI bit n c th thc s dng ng
dng. Thng bo ny l cn thit m bo lung dng hnh c dng thc s khi
Activity b dng hay ng lung UI. Khi activity b ng, trng thai ca Game s l
GLGameState.Finished, v mt thng bo s c gi ti lung UI tt hon ton ng
dng.
Trong hm onPause() ca Activity, ph thuc vo vic ng dng b ng hay tm
dng, trng thi s c thit lp l GLGameState.Finished hay GLGameState.Paused v
ch i lung dng hnh x l cc trng thi. Cui cng l gi cc hm dng
GLSurfaceView v Activity.
Cc phng thc getGraphics(), getAudio(), getInput(), getFileIO() s tr v cc thc
th tng ng.
Phng thc setScreen() s dng v xa mn hnh (cnh) hin ti v bt u mt mn
hnh (cnh) mi. Phng thc getCurrentScreen() s tr v mn hnh hin ti ca Game.
2.6 Hon thin Framework
Sau khi hon thnh phn 2.5,v c bn framework c hon thnh.
Framework c hon thin hn, phn 2.6 s xy dng thm mt s phn nh : cc i
tng trong Game, kim tra va chm, ti u b nh.
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 83

2.6.1 Cc loi i tng v kim tra va chm trong Game

Hnh 2.7 Cc loi i tng v kim tra va chm trong Game
Trong Game c hai kiu i tng l i tng ng v i tng tnh.
i tng tnh l th hin ca lp GameObject. Mi i tng tnh c mt v tr
v mt hnh ch nht bao quanh i tng x l pht hin va chm
i tng ng l th hin ca lp DynamicGameObject, k tha cu lp
GameObject. Ngoi cc thuc tnh ca mt i tng tnh, i tng ng cn c thm
thuc tnh vn tc, gia tc.
pht hin va chm gia cc i tng, mi i tng s c mt hnh bao quanh :
thng l hnh ch nht, ngoi ra c th l hnh trn hay hnh tam gic (t dng)
Gi xy dng hnh bao quanh cho cc i tng v pht hin va chm gm cc lp :
Vector2.class : to 1 im, hay 1 vector
Triangle.class : to 1 tam gic t 3 im
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 84

Rectangle.class : to 1 hnh ch nht vi u vo l bn gc cng chiu di v
chiu rng.
Circle.class : to 1 hnh trn vi 1 im l tm v 1 bn knh
CheckCollision.class : pht hin va chm gia cc hnh bao quanh.

Cc k thut pht hin va chm gia cc hnh khi :
Va chm gia hnh trn vi hnh trn : kh n gin, ch cn xt khong cch gia
2 tm nh hn tng bn knh ca 2 hnh.

Hnh 2.8 Va chm gia 2 hnh trn [15]
Va chm gia 2 hnh ch nht : kim tra cnh tri ca hnh 1 nm bn tri hnh 2
hoc cnh phi hnh 1 nm phi cnh tri hnh 2 hoc cnh trn hnh 1 nm trn
cnh di hnh 2 hoc cnh di hnh 1 nm di cnh trn hnh 2


Hnh 2.9 Va chm gia hai hnh ch nht [15]

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 85

Va chm gia hnh ch nht v hnh trn : tm ta (x,y) trn hoc trong hnh
ch nht gn ta ca tm hnh trn nht. Nu ta (x,y) tm c nm trong
hnh trn th xy ra va chm.

Hnh 2.10 Va chm gia hnh trn v hnh ch nht [15]
Kim tra im nm trong hnh trn hay hnh ch nht : ch cn xt khong cch ti
tm (trng hp hnh trn) v xt v tr vi cc cnh (trng hp hnh ch nht)
Kim tra im nm trong tam gic : s dng k thut Barycentric

Hnh 2.11 Kim tra im nm trong tam gic [15]
Vector PA= u * BA + v * CA
Tm c u,v nh sau:
Vector2 v0 = r.C.sub(r.A);
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 86

Vector2 v1 = r.B.sub(r.A);
Vector2 v2 = p.sub(r.A);
float dot00 = v0.dot(v0);
float dot01 = v0.dot(v1);
float dot02 = v0.dot(v2);
float dot11 = v1.dot(v1);
float dot12 = v1.dot(v2);

float invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
float v = (dot00 * dot12 - dot01 * dot02) * invDenom;

Kim tra iu kin P nm trong tam gic ABC
return (u >= 0) && (v >= 0) && (u + v < 1);

Va chm gia 2 tam gic: kim tra cc nh ca tam gic ny nm trong tam gic
kia
Va chm gia tam gic v hnh ch nht: kim tra cc nh ca tam gic nm
trong hnh ch nht hoc cc nh hnh ch nht nm trong tam gic
Va chm gia tam gic v hnh trn : kim tra cc nh tam gic nm trong hnh
trn hoc hnh trn va chm cc cnh ca tam gic (thut ton di)
Va chm gia hnh trn vi cnh ca tam gic :


Hnh 2.12 Kim tra va chm gia hnh trn v cnh tam gic [15]
Tnh on k v kim tra iu kin va chm p
2
- k
2
<= (c.radius)
2

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 87


2.6.2 Ti u b nh

Hnh 2.13 S lp tng quan ca Framework
Nh vy chng 2 ca n xy dng xong mt Framework hon chnh, i t vic
xy dng cc m-un nn tng nh Audio, Input, FileIO, Graphics n vic kt hp cc
m-un trong giao din Game, b sung thm phn qun l va chm v ti u b nh. Vi
Framework ny ngi dng c th vit mt Game 2D cho in thoi mt cch kh
thun li. Chng 3 ca n s trnh by mt s hng dn nh ngi dng c th
tip cn Framework ny d dng hn.

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 88

CHNG III. S DNG FRAMEWORK
Sau khi xy dng xong c mt Framework c bn trong chng II, chng III
ca n s trnh by mt v d n gin ngi dng c th hiu cc bc n gin
nht khi s dng Framework ny vit Game. Ni dung trnh by trong chng ny s
bao gm cch to activity chnh cho Game, cch ti cc ti nguyn nh nh, m thanh
cho Game, cch thit lp cc cnh (mn hnh), xy dng nhn vt ng v tnh, xt va
chm gia cc nhn vt,
Thit lp activity chnh cho Game:
Ngi dng ch cn to mt class k tha lp GlGame ca Framework. Vit li
phng thc getStartScreen() ly v mn hnh u tin ca Game. V d :
public Screen getStartScreen() {
return new MenuScreen(this);
}
Vic th hai l vic ti ti nguyn cho Game trong phng thc onSurfaceCreated()
nu Game c khi ng ln u hay ti li ti nguyn nu nh Game c tip tc t
trng thi dng. Vic ti nguyn nn c vit trong mt class khc v gi n trong
phng thc onSurfaceCreated() ca activity chnh.
Ti ti nguyn cho Game : nn c vit trong mt class ring v d class Assets.
Hai loi ti nguyn chnh l hnh nh v m thanh.
o Ti hnh nh :
nh s c ti ln cc i tng Texture. ng vi mi Texture c th c mt hay
nhiu Texture Region, chnh l phn hnh nh i din cho cc i tng hay cc
thnh phn trong Game. V d items l mt i tng Texture v nobi l mt i
tng Texture Region, mt phn ca Texture items :

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 89


Hnh 3.1 Texture (bn tri) v Texture Region (bn phi)
Texture Region s c v tr v kch thc c th trong Texture:
items= new Texture(game, "sprites.png");
nobita= new TextureRegion(items, 66,61,28,46);
Trng hp s dng hnh nh ng cho i tng s dng i tng Animation.
Animation s s dng nhiu Texture Region (mi Texture Region l mt khung trong
nh ng) v mt thng s thi gian ca mi khung (frameDuration)
nobi= new Animation(0.2f, new TextureRegion(items, 438,435,27,50),
new TextureRegion(items, 438,388,28,46));
o Ti nguyn m thanh :
m thanh c th l nhc nn cho Game (music) hoc cc m hiu ng (sound effect),
v d :
music = game.getAudio().newMusic("doraemon_theme.mp3");
jumpSound = game.getAudio().newSound("jump.wav");
Cc i tng music v jumpSound s c to mi t th hin Audio ca game
(hay ca activity chnh), chng c chy vi phng thc play().
Thit lp cnh (mn hnh) trong Game:
o Xy dng i tng trong Game :
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 90

Trong Game thng c hai loi i tng l i tng tnh (v d nh cc vt cn,)
v i tng ng (nh cc nhn vt chuyn ng). Cc i tng tnh c xy dng rt
n gin bng vic k tha lp GameObject ca Framework i km vi cc thng s v
kch thc. Cc i tng chuyn ng s c k tha t lp DynamicGameObject t
Framwork. Ngoi cc thng s v kch thc nh cc i tng ng, chng cn c
thng s v vn tc v mt hm cp nht cp nht vn tc v v tr thay i trong
Game.
o Thit lp cho cnh :
Trc ht cn xc nh kiu mn hnh s c dng cho Game l ngang
hay dc, thng qua vic thit lp trong file AndroidManifest.xml :
android:screenOrientation="landscape"
hoc
android:screenOrientation="portrait"
Trong mi cnh thng s dng hai thng s hng lu tr kch thc
chiu ngang v chiu rng ca khng gian Game:
static final float FRUSTUM_WIDTH = 15;
static final float FRUSTUM_HEIGHT = 10;
Mi cnh s c mt i tng Camera xc nh khong khng gian
Game s c v ln mn hnh ca in thoi, cng vi mt i tng SpriteBatcher
phc v cho vic v ln mn hnh. V d:
guiCam = new Camera2D(glGraphics, FRUSTUM_WIDTH ,
FRUSTUM_HEIGHT);
batcher = new SpriteBatcher(glGraphics, 100);
Hm cp nht : update(float deltaTime) - deltatime l khong thi gian
gia cc ln cp nht, c truyn vo hm cp nht trong hm onDrawFrame() ca lp
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 91

GlGame m Activity chnh k tha. Gi tr ca deltaTime s c gii hn l 0.1 giy
m bo cc thit b chy cc phin bn Android thp cng s cho hnh nh mt m.
if(deltaTime > 0.1f)
deltaTime = 0.1f;
Hm cp nht cng s cp nht u vo t ngi dng (nh s kin chm mn hnh)
v x l chng :
List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
game.getInput().getKeyEvents();
int len = touchEvents.size();
if (len>0)
{
. . .
}
Hm ny cng s cp nht trng thi ca cc nhn vt v kim tra s va chm ca
chng, v d :
nobita.update(deltaTime);
checkCollision();
Hm v ln mn hnh present (float deltaTime):
Hm ny cng c gi bi hm onDrawFrame() trong lp GlGame m Activity
chnh ca Game k tha. Trong hm ny s ly v mt i tng GL10 thng qua th
hin glGraphics kch hot Texture, ng thi thit lp Camera, sau l cc
phng thc v nh v nn, v cc i tng, v d :
GL10 gl = glGraphics.getGL();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 92

gl.glEnable(GL10.GL_TEXTURE_2D);
guiCam.setViewportAndMatrices();
presentBackground();
presentObject(deltaTime);
Hm v nn hay cc i tng s s dng i tng batcher khai bo, v d :
batcher.beginBatch(Assets.background);
batcher.drawSprite(FRUSTUM_WIDTH/2, FRUSTUM_HEIGHT/2,
FRUSTUM_WIDTH, FRUSTUM_HEIGHT,
Assets.backgroundRegion);
batcher.endBatch();


Hnh 3.1 Minh ha cnh trong Game
Kim tra va chm gia cc i tng :
Vic kim tra va chm thc hin trong hm checkCollision() c gi trong hm
cp nht ca cnh. Trong hm ny s kim tra s va chm cc hnh bao quanh ca cc
i tng, v s x l khi va chm xy ra. V d :
Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 93

if (CheckCollision.overlapRectangles(nobita.bounds, castle.bounds))
{
nobita.state=Nobita.NOBITA_STATE_STOP;
}


Hnh 3.2 Va chm ca i tng trong Game
Chng III ca n trnh by mt vi bc c bn c th s dng Framework
c xy dng trong chng II. Vi nhng hng dn c bn ny, ngi dng c th
d dng xy dng mt Game 2D trn in thoi vi Framework ny.

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 94

KT LUN
Vi thi gian c hn cho n chng ti c gng xy dng mt engine game c
bn c th xy dng mt game 2D bt k da trn n. V c bn cc module yu cu
bt buc chng ti xy dng c v c b sung thm mt s module b tr. Tuy
nhin trong thi gian ngn p ng c yu cu n vi nhiu module khc nhau
th chng ti cha thc s to ra c im g ni bt mang tnh bt ph so vi cc
engine c pht trin bi cc cng ty hay cc nhm lp trnh khc nhng i li
nhng mc tiu t ra chng ti xy dng game ny mt cch mch lc r rng d
hiu nhng lp trnh vin ca chng ta hon ton c th tip cn mt cch nhanh
chng v c th vit nhng game n gin cho ring mnh. V hng pht trin trong
tng lai th chc chn engine game ca chng ti phi x l c ha 3D ng thi
nng cp cc module c bng cch to ra nhiu ty chn h tr ngi dng nh xy dng
cc hm np chng vi nhiu u vo khc nhau.
Cui cng mt ln na chng ti xin cm n Trng i hc Bch Khoa H Ni
to iu kin cho chng ti cng cc Thy V Song Tng tn tm gip chng ti
hon thnh n ny. Xin chn thnh cm n!

Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 95


TI LIU THAM KHO
[1] http://developer.android.com/, truy cp ln cui 2/6/2014
[2] http://stackoverflow.com/, truy cp ln cui 2/6/2014
[3] http://code.google.com, truy cp ln cui 2/6/2014
[4] http://www.andengine.org/, truy cp ln cui 2/6/2014
[5] http://libgdx.badlogicgames.com , truy cp ln cui 2/6/2014
[6] http://github.com, truy cp ln cui 2/6/2014
[7] http://androidgamestuto.blogspot.com/, truy cp ln cui 2/6/2014
[8] http://www.kilobolt.com/, truy cp ln cui 2/6/2014
[9] http://mobilegameengines.com/, truy cp ln cui 2/6/2014
[10] http://android.vn/, truy cp ln cui 2/6/2014
[11] Mario Zechner and Robert Green, Begginning Android 4 Games Development,
Apress, 2011
[12] http://vietgamedev.net/, truy cp ln cui 2/6/2014
[13] J. F. DiMarzio, Practical Android 4 Games Development, Apress, 2011
[14] http://www.androidhive.info/, truy cp ln cui 2/6/2014
[15] Mario Zechner and Robert Green, Beginning Android Games, Apress, 2012
[16] http://www.youtube.com, truy cp ln cui 2/6/2014
[17] http://www.gametutorial.net/, truy cp ln cui 2/6/2014
[18] Vladimir Silva, Advanced Android 4 Games, Apress, 2012
[19] Richard A. Rogers, Learning Android Game Programming, Apess, 2012





Framework for mobile game development

Nguyn Vn Bnh 20090243
Dng Vn Sinh 20092219 96

You might also like