Lập trình game trên di động với J2ME
Mục lục A. Các mức đồ họa trong J2ME I. Tổng quan về J2ME !"#$$% &'() * + II.Các thành phần đồ họa ở mức cao của ứng dụng MIDP , III. Các thành phần đồ họa ở mức thấp của ứng dụng MIDP &- $-. B.Ứng dụng Game trong J2ME . I. Sơ lược về lập trình Game trên J2ME. &-. /+ 01 ./, 23*/. II. Xây dựng Game với Game Builder trong IDE NetBeans . LỜI MỞ ĐẦU 45//67895/$5:;5<=> *? @$$%A-B9CA$D;E5 D>$:$(F$:$ (<$)67-BFG$H)I5>$)$:$*?@$6>9$FJKC /9$F'9$F6ICL9$F6"#$FM/>N$OP Q>B-R5>$<F;6789<=> @$"F$#K$9 5ST895"<=9S ;*5 5U5*$%DU$ND6O$V(WIXY$% 1 B*5 )676:ZF5$G(W<= [*CL$"$>$:$"(P>N\"(PKM:M $>$$-B$%]CAF^$(*5[*9$-F- &#J$)H[/:>3X_`- )(O&O [ F&OOFCATN9$U:$!>_54K CY$#>M:9$5$< &#J$)H$:$5*&O[ K$DaD bJR/@5#c$#>55 5U5* A .Các mức đồ họa trong J2ME I. Tổng quan về J2ME 1. Giới thiệu J2ME : CL$:;d6"#$&F(5e->*$% ()T"-@A$%0M/"P/"e->* 5CH$9*5$>>F/"f*5T# 9F*5 )$>$:$"(P$DI$XgF9_N[ *$:$>N" I$L:/)>>-) h$%F$I/$>5//Y*5Oai(" X;*<=D$5D 2 Kiến trúc của J2ME : 2 Giới thiệu các thành phần trong nền tảng J2ME: jTP? &>k>l&Xmn5^$)P?OCA [ $>G$:$"(PCL$R*>N(WL$:$^$IFI= Cn o!;5-B*CL( o!;5B$(Jp*b o!;N6"B q>R/*5^$)$:$5-)JX"(PC0-F4>6(f($ )@$[/%$:$^$)>0MP;$:$*$D;@5> OCA*XM:5OM-@XM:5/F$:$<=CL$ N>$D;I$*"(P$>X$D;QI=C* "$CH$>>N0-$D;-pi$CH $%$:$B;X;$D;$N/94>6 _/0KCN&>k>n 3 o&q&l&>$q$&>k>r&X"(P6"B NmnCL$"6";f5>PCA$:$"(P$XXl*>srmF$:$ "(P5/OCA*5:/95eqt6>)2!U (Q5/(N$"&q&CL$f6OR/ lu* mFNC$>vCA-p=5) $:$<= FI=C*5* o&q&r&>$q$&>k>l&X"(P6"Bmn&q&CL$ Cf"$:$"(P$DI'NHG"(P$&q& CY/"H$:$B:/;(5-p=04a"(P5/$D (HlOCA*5(m5$D(Jp*bNH&:$-) h5/$D;6;"C$:$:/eqt$X$>F>Ns(F &)N&X6; $<:/)>lQ*$m5 L$:$*l$* m$H();$$XOCA$>$:$<= 3/F(N$#bwB$:$"(P$XXF>N$" 5 /C(5(Jp*b6O;/$[:/)>iLX$)$:$I 'C:/)>$%0 jTP? e>k*n e>k*W&>k>(w$:$5>$:$$* ;(iL$:$I '$>d"(P$/(&)&>k> $Da>k** M5da>k*5/$D;`$:$$* *YT"R/$D; X/>]>k*P?L$:$$* 6:$FCA 6O;$/;<="$>>k*5/5$N/ :/]L>k*6:$&x*b>DF(N6O;*X/<= "0/5$N/$:$:/]L0R/*5$:$>k* (;n o>(*yk>>q$e>k*lyqemn>k*5/-z(i-$:$I' C]L6"BF$:$5[]L>CA`5>&q& e>k*5/CL$"6"$%/";f5>9^$I*5 4 5;PN$"F*CL$<$DNq>Dyqe-z$$X >CA`H)5$:$I'NH)@_33e&D ;Dyqe*5>k*i"X(WD*56"<$$H()$>* $:$:/lu* m oeqte>k*nCH@yqeFCPCA*5$:$:/eqt5 5(*H o{>>e>k*n$>vW$:$I'$%&q&[*$:$ C$%(&> 4>5$G$De->*U--e>k*Fe->*e>k*F|ye>k*F e>k* 3 Căn bản về lập trình J2ME : 3.1 MIDlet : yq**5<=CL$"6";$N/$:$"(P yq*$<$:$*`(W&q&5yqe(yq*8 >^$ yq*CL$DD$`5v>k*t|{*t|-} -5$>$$5^5>>NQX $%**5N>$:$yq* 0R/*5$X#$*$%yq* import javax.microedition.midlet.*; import javax.microedition.lcdui.* public class MidletExample extends MIDlet { public void MIDletExample() { } public void startApp() { } public void pauseApp() {} public void destroyApp(boolean unconditional) { } } **O*O6"d*yq*$D-}>yqeyq*w >Dn~J$>>*F$:$CH<$$H()5**O )$Dn startApp( ) neCH<$5/CL$9(W(M)*b<=66WN> yq*5]6yq*W dN:- 5 pauseApp( ): eCH<$5/9(M)*b<=]6<=$[N d<=@$!-p=-t)D[5 /$%yq*;5($>$:$<=6:$ destroyApp( ): eCH<$5/CL$`6>:6gyq*3C$D) )D>5>5(CL$*X/(Wyq* jQGA$%*n 3.2 API của J2ME : <=yq*$V$DBCL;q-*/TBCL5/` ;*X/O BCL(5/FI=5CL$]LF5(>8$:$ CH<$;/$[$:$BCLCL$(5/TBCLq-*/$[" $>(M)*b$(5/"(P 6;5[5>-zCL$; P*"(P ^$`$V$DBCLq-*/<]yq*FC B CL>yq*$D;CL$;P"(PC{>-F 3JU>J-F&>$>-F 6 BCLq-*/(**55[CL$;P"(P yqe$<*$>$%*q-*/(**50$5&-_CR/O )BM BCL0$6O)*5$:D"(PF5* 0$5/-zCL$d6"(W$:$5[;PW<$$>F$I$:$5 [5/-zCL$;P5_CR/-zO)BM $%*0$5$:$5[;W<$$> &-CL$-p=>$:$$CH/$:$<=$[ zaBCL(F^$;$%D*5II6)$/;F>:$ 7 *5/;z$:$BCL*5&-$x$D;(f$:$-@ 6(wXI(XQ*5<$X$>vCA*g:> :$5&)* w>D~J$>>*$j 3>*$:$5[>W<$$>CL$-p =;N>$:$F$:$*@$9$5^$> II.Các thành phần đồ họa ở mức cao của ứng dụng MIDP 1. Form và Items : 3>[5/-z$:$5[CL$;P{> {>$VH)*56$<$:$5[F5]5[CL$ d6"d*y&#-zJM$:$5[;P"(Pn oq{* o o0y o3J{* o&>$> o0$ o&->y oyyy a) DateField 35[q{*$$XCH@$M;>:$BCL qCL$P?>~*q!N>BCLq{*F(N $[$V•*5CA`$V$D;$V-p5/F$V-pA/8A$) &:$CH<$6WN>$%*q{*8n DateField(String label, int mode) DateField(String label, int mode, TimeZone timeZone) &:$>CH<$%*q{*8n DateField.DATE_TIMEn$>v/i5/A DateField.TIMEn$V$>v/iA DateField.DATEn$V$>v/i5/ QI=n private DateField dfAlarm; // Tạo một đổi tượng DateField với nhãn, cho phép thay đổi cả ngày và giờ 8 dfAlarm = new DateField("Set Alarm Time", DateField.DATE_TIME); dfAlarm.setDate(new Date()); b) Gauge 5[*56;>CACL$`;O)<$ >55$O$&D*>N*5*>NCH:$5*>N6OCH :$>N[$>vCA`$D;/iF*>NGgCA :;)$ qCAR/*556WN>$%*n Gauge(String label, boolean interactive, int maxValue, int initialValue) QI=n private Gauge gaVolume; // Điều chỉnh âm lượng gaVolume = new Gauge("Sound Level", true, 100, 4); c) StringItem 5[0yCL$`;;PK/$]'() 4CA`6O;/iK/$]'()6$CH $N/ 0y6O-@6 eCH<$6WN>$%*0y StringItem(String label, String text) d) TextField 5[3J{*CH@C(X6€$:$BCL'() (;5>UN$D;$VPKF-B6b@BCL$vF5 *>Na*CL$v4>53J{*$G$>v(N5> 6h$:$6b@5>-zCL$$(W$:$6b@^N eCH<$6WN>$%*3J{* TextField(String label, String text, int maxSize, int constraints) 35[<constraints *55[5$#MRFD*5 CH;J:$P*>Na*5>CL$v5>3J{* yqeP?$:$-B5($-$>5[3J{*n ot4•n$>v(X6€6b@5> otytqq|n$V$>vR5>$:$P$V*L* o4‚|y&n$V$>v-B oe_ƒ44‚U|n&V$>v-B>N o‚|n&V$>v$:$6b@L*(>‚| oet00uƒ|qn$X$)$:$6b@5> 9 e) ChoiceGroup 35[&>$>$>vCA`$9d-:$[5> KCL$P?C$&>$>$D*>Nn o*r-*$>l$>v$9 =$mnD5/$D*M"$:$ $$6(>J oJ$*-r-*$>l$VCL$$9=$mnD5/*M"D$:$ >(> f) Image and ImageItem _*CL$`;;P)*5ny5yyy CL$`;N>BCL)5aOC*5$ $>5 $ F5`)$D("i/6OyyO)X)-z CL$;PC"5>FI=X)-zCL$^WRF/^ I (:F/($%5yqeC*>N)*5*>N)6O ("i5)("iX)6O("i6O;(P/i6; d*#$DCL$N>T^$C$%*>N)5/*5CL$9$d X)("i $H()*5`T 5/`/$5>$(NN> $%X)(w$:$D*`&#-z*5$ aX)6O("i>()- &:$CH<$@$>*y5yy oImage createImage(String name) • Image createImage(Image source) • Image createImage(byte[] imageDate, int imageOffset, int imageLength) • Image createImage(int width, int height) • Image createImage(Image image, int x, int y, int width, int height, int transform) • Image createImage(InputStream stream) • Image createRGBImage(int[] rgb, int width, int height, boolean processAlpha) • ImageItem(String label, Image img, int layout, String altText) T>NKCR/O)*5"5>N>X)dF5fD BCLyy5(<$)5>{> Form fmMain = new Form("Images"); 10 [...]... 15 Lập trình game trên di động với J2ME III Các thành phần đồ họa ở mức thấp của ứng dụng MIDP 16 Lập trình game trên di động với J2ME Khi lập trình cho máy tính, thường chúng ta chỉ sử dụng các thành phần giao di n có sẵn để tạo ra giao di n người dùng Tuy nhiên, khi lập trình cho điện thoại di động sử dụng MIDP, thành phần giao di n có sẵn khá nghèo nàn MIDP chỉ cung cấp các thành phần giao di n... Thiết lập hiện/ẩn Layer Màn hình đồ họa của game trong J2ME : 30 Lập trình game trên di động với J2ME 3.Sprite Một Sprite là một thuật ngữ chung trong game Nó tham chiếu đến một phần tử trực quan được tạo ra bởi các Image, thường chuyển động và di chuyển xung quanh các phần tử khác một cách độc lập trong game Lớp Sprite trong MIDP 2.0 đại di n cho khái niệm này Nó cho phép tạo ra các Sprite dựa trên. .. lược về lập trình Game trên J2ME * J2ME Game API : Thực tế ta hoàn toàn có thể làm game J2ME với kiến thức về lập trình di động J2ME, và đặc biệt là thành phần giao di n mức thấp Canvas của nó Lớp Canvas cho phép ta vẽ lên màn hình điện thoại, nó hỗ trợ vẽ các đối tượng như đường thằng, đường tròn, tô màu một vùng màn hình, hay có thể copy một vùng màn hình vào vùng đệm và đặt nó vào chỗ khác … Với những... cũng đại di n cho toàn bộ di n tích khung vẽ có thể trên thiết bị trình bày Nói cách khác, chúng không thể chỉ định kích thước cho canvas, mà phần mềm trên một thiết bị MIDP sẽ trả về di n tích lớn nhất có thể có đối với một thiết bị cho trước 2 Vẽ trên đối tượng Canvas: a Thiết lập chế độ vẽ Canvas lên toàn bộ màn hình: Có 2 chế độ để Canvas được hiển thị: 18 Lập trình game trên di động với J2ME - Normal:... layerManager.paint(g,0,0) 34 Lập trình game trên di động với J2ME II Xây dựng game bằng GameBuilder trong IDE NetBeans 1 Giới thiệu về GameBuilder trong NetBeans : Như trên đã biết để tạo các Sprite các TiledLayer và các bản đồ trong game chúng ta phải dùng các phương thức khởi tạo khá phức tạp Những công đoạn đó rất dễ gây nhầm lẫn và không thuận tiện cho việc lập trình game vốn dĩ đã bao gồm nhiều... loại anchor của hình ảnh tương đối khác với text, đó là không sử dụng anchor BASELINE(đường chẩn của ký tự / chuỗi) mà thay vào đó là VCENTER để chỉ điểm giữa theo chiều dọc của hình ảnh B.Ứng dụng Game trong J2ME 27 Lập trình game trên di động với J2ME Xuất phát từ niềm đam mê và kiến thức sẵn có về lập trình game, nhóm chúng em đã lựa chọn việc xây dựng một số game Mobile để làm ứng dụng minh họa cho... NetBeans có cung cấp một công cụ giúp cho lập trình viên có thể tạo và quản lý các đối tượng đồ họa trong game một cách dễ dàng, đó chính là công cụ GameBuilder Để tạo một lớp GameDesign ta thực hiện như sau : Sau khi đặt tên màn hình làm việc của GameDesign hiện ra như sau : 35 Lập trình game trên di động với J2ME Phần Sprites là nơi chúng ta tạo các sprite của game Phần Tiled Layers để chúng ta tạo... Polling Input và Frame Buffer 1.1 Polling Input : Trong game di động người ta thường sử dụng các phím chức năng để thao tác Một game hoàn chỉnh có thể chỉ thao tác với 5 phím chức năng là UP, DOWN, 28 Lập trình game trên di động với J2ME LEFT, RIGHT và phím FIRE (phím bắn) Ta có thể dùng các phím số tương ứng thay cho các phím chức năng như bảng trên Điện thọai bố trí các phím chức năng đặt gần nhau... 0xFF0000)>>16; green=(color & 0xFF00)>>8; blue=color & 0xFF; Có thể kiểm tra thiết bị di động có màn hình màu không bằng phương thức: javax.microedition.lcdui.Display.isColor() Ngoài ra có thể lấy số màu thiết bị có hỗ trợ bằng phương thức javax.microedition.lcdui.Display.numColors() 21 Lập trình game trên di động với J2ME , nếu thiết bị chỉ có màn hình trắng đen thì giá trị trả về là giá trị grayscale... một chương trình game từ đơn giản đến phức tạp Tuy nhiên thời gian làm game sẽ rất tốn kém và khối lượng công việc liên quan đến vẽ giao di n là rất lớn.Qua tìm hiểu em thấy J2ME có một gói hỗ trợ tốt cho lập trình game gọi là chung là Game API Các lớp của nó nằm trong javax.microedition.lcdui .game Một số lớp quan trọng của nó như: GameCanvas, Layer, Sprites, TiledLayer, và LayerManager • GameCanvas: . &- $-. B.Ứng dụng Game trong J2ME . I. Sơ lược về lập trình Game trên J2ME . &-. /+ 01 ./, 23*/. II javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class EventProcessing extends MIDlet implements ItemStateListener, CommandListener { private Display display; //. K$DaD bJR/@5#c$#>55 5U5* A .Các mức đồ họa trong J2ME I. Tổng quan về J2ME 1. Giới thiệu J2ME : CL$:;d6"#$&F(5e->*$% ()T"-@A$%0M/"P/"e->* 5CH$9*5$>>F/"f*5T# 9F*5