Đăng ký Đăng nhập
Trang chủ Công nghệ thông tin Kỹ thuật lập trình Thực tập cơ sở lập trình game di động với j2me...

Tài liệu Thực tập cơ sở lập trình game di động với j2me

.DOC
61
383
94

Mô tả:

Thực tập cơ sở lập trình game di động với j2me
Lââp trình game di đôâng với J2ME Tin2_K50 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN Thực Tâ pâ Cơ Sơ Lâ âp Trình Game Di Đô âng Với J2ME Giảng viên hướng dẫn: Thầy giáo Thạc Bình Cường Page 1 Lââp trình game di đôâng với J2ME Tin2_K50 Nôâi Dung Lơi mơ đầu.............................................................................................................................................4 Phần 1.....................................................................................................................................................5 Cơ Sơ Lý Thuyết Lâ âp Trình Di Đô âng...................................................................................................5 1. Nhưng hạn chế của lâ âp trình di đô âng...........................................................................................5 2. Tổng quan về ngôn ngư J2ME......................................................................................................6 2.1 Sự phổ biến của J2ME.................................................................................................................6 2.2 Nền tảng J2ME............................................................................................................................7 2.3 Căn bản lâ âp trình J2ME...............................................................................................................9 2.3.1 Bô â MIDlet..........................................................................................................................10 2.3.2 API của J2ME....................................................................................................................11 Phần 2...................................................................................................................................................13 J2ME Game API..................................................................................................................................13 1. J2ME Game API..............................................................................................................................13 1.1 GameCanvas class.....................................................................................................................14 1.2 Layer class.................................................................................................................................17 1.3 Sprite Class................................................................................................................................17 1.4 TiledLayer class.........................................................................................................................24 1.5 LayerManager class...................................................................................................................26 Phần 3...................................................................................................................................................28 Tổng Quan, Kiâch Bản Và Phân Tích Lâ âp Trình Game....................................................................28 1. Tổng quan về làm Game.................................................................................................................28 1.1 Phân loại game...........................................................................................................................28 1.2 Nhưng đòi hỏi chung của mô ât game..........................................................................................28 1.3 Quy trình phát triển game..........................................................................................................28 2. Các Nhân Vâ ât Game Và Phân Tích Lâ âp Trình..............................................................................29 2.1 Các nhân vâ ât trong game và đă âc điểm:......................................................................................29 2.2 Phân tích các nhân vâ ât theo lớp..................................................................................................30 2.3 Mô ât số vấn đề đă ât ra và hướng giải quyết:.................................................................................32 Phần 4...................................................................................................................................................33 Xây dưng mô hình UML cho chương trình.......................................................................................33 1 Use Case Diagram.............................................................................................................................33 Page 2 Lââp trình game di đôâng với J2ME Tin2_K50 2 State Diagram...................................................................................................................................34 3 Class Diagram...................................................................................................................................36 .1 Class Diagram của các nhân vâ ât trong game..................................................................................36 .2 Class diagram của lớp giao diê ân....................................................................................................38 4 Mô ât số luồng quan trọng trong chương trình.................................................................................39 4.1 Luồng chính.................................................................................................................................39 4.2 Luồng sư lý phím bấm.................................................................................................................41 4.3 Luồng xác định đối tương bắn của Player....................................................................................42 4.4 Luồng quản lý đạn của Player trong màn hình.............................................................................43 4.5 Luồng xư lý khi đaân chưa ra khỏi màn hình................................................................................44 Phần 5...................................................................................................................................................46 Công cụ lâ âp trình Game J2ME của Netbeans...................................................................................46 1. GameDesign.....................................................................................................................................46 1.1 Ảnh dùng để làm game..............................................................................................................47 1.2 Taâo hình ảnh nhân vâ ât chuyển đô âng...........................................................................................47 1.3 Tạo các TiledLayer....................................................................................................................49 1.4 Tạo các tile đô nâ g trên TiledLayer..............................................................................................50 1.5 Tạo bản đồ.................................................................................................................................51 2 VisualMIDlet....................................................................................................................................52 Phần 6...................................................................................................................................................54 Giới thiê âu luâ ât chơi..............................................................................................................................54 1. Nhiê âm vụ:..........................................................................................................................................54 2. Cách chơi...........................................................................................................................................54 3. Mô ât số thông tin về game..................................................................................................................55 4. Mô ât số hình ảnh trong game..............................................................................................................56 Phần 7...................................................................................................................................................58 Kết luâ ân................................................................................................................................................58 1. Nhưng kết quả đạt đươc.....................................................................................................................58 2. Nhưng hạn chế...................................................................................................................................58 3. Hướng phát triển................................................................................................................................59 Danh mục các tư viết tắt.....................................................................................................................59 Danh mục hình.....................................................................................................................................60 Tài liê âu tham khảo...............................................................................................................................60 Page 3 Lââp trình game di đôâng với J2ME Tin2_K50 Lơi mơ đầu Dịch vụ di đô nâ g đươc bắt đầu đươc cung câp tại Viê ât Nam vào năm 1992, khơi đầu với nhưng điê ân thoại “cục gạch” phải đeo vai mà giá trên 2000 đô la. Với chi vài trục thuê bao đăng kí đầu tiên thì cho đến nay đã hơn 20 triê âu thuê bao. Cùng với tốc đô â phát triển đó là nhưng tiến bô â vươt bâ âc về tốc đô â xư lý. Nhờ đó lâ pâ trình các ứng dụng cho loại thiết bị này tăng lên nhanh chóng, đă câ biê ât là các dịch vụ giá trị gia tăng trên mạng di đô nâ g như SMS, RSS, WAP và ứng dụng dịch vụ game. Qua tìm hiểu về, em thấy thị trường Game di đô nâ g tại Viê ât Nam đang phát triển và có tiềm năng lớn; đó là lý do em chọn đề tài này. Page 4 Lââp trình game di đôâng với J2ME Tin2_K50 Phần 1 Cơ Sơ Lý Thuyết Lâ âp Trình Di Đô âng Phần này em xin trình bày từ tổng quan đến chi tiết. Trước hết nói về các đă âc điểm riêng biê ât của lâ pâ trình di đô nâ g, đă âc biê ât là nhưng hạn chế của nó, sau đó đến cơ sơ của ngôn ngư lâ pâ trình di đô nâ g J2ME và cuối chương giới thiê âu về công cụ giúp lâ pâ trình game di đô nâ g. 1. Nhưng hạn chế của lâ âp trình di đô âng Sự khác nhau lớn nhất giưa lâ âp trình cho di đô nâ g so với lâ pâ trình cho PC là ta phải quan tâm lớn đến bô â nhớ, kích thước màn hình hay thâ âm chí là màu sắc của thiết bị. Nhưng vẫn đề đó lại không quan trọng bâ âc nhất đối với PC. Hơn thế nưa ta còn phải quan tâm đến sự khác nhau giưa các hãng sản xuất cũng như dòng máy di đô nâ g của hãng. Các dòng máy khác nhau sẽ có bô â nhớ, kích thước, màu sắc màn hình và cả hỗ trơ cho lâ âp trình cũng khác nhau. Các loại bô â nhớ Bô â nhớ làm viê âc hay còn gọi là heap memory là phần bô â nhớ đươc dùng trong suốt quá trình chạy và đươc giải phóng khi ứng dụng kết thúc. Ứng dụng dành cho di đô nâ g phải có bô nhớ nhỏ hơn vùng nhớ này mới có thể chạy đươc. Mô ât loại bô â nhớ khác dùng để lưu trư là bô â nhớ RMS (Record Management System). RMS là bô â nhớ mà thông tin vẫn còn đươc lưu khi ta tắt ứng dụng. Lấy mô ât ví dụ trong game ta dùng bô â nhớ này để lưu top nhưng người chơi cao điểm nhất. Các thông tin đó vẫn đươc câ âp nhâ ât cho lần chơi tiếp theo. Sự phân mảnh Giống như PC phân mảnh bô â nhớ có thể xảy ra với điê ân thoại. Sự đa dạng về giao diê ân điê nâ thoaị Page 5 Lââp trình game di đôâng với J2ME Tin2_K50 Ngoài vấn đề về bô â nhớ khi lâ pâ trình ta còn phải quan tâm đến kích thước của từng loại thiết bị cụ thể. Kích thước màn hình của điê nâ thoại mà ta lâ âp trình có ảnh hương rất lớn đến cách thiết kế giao diê ân và lâ âp trình. Hình 1: sự đa dạng về chủng loại điê ân thoại 2. Tổng quan về ngôn ngư J2ME 1. Sự phổ biến của J2ME 2. Nền tảng của J2ME 3. Căn bản lâ âp trình J2ME 2.1 Sư phổ biến của J2ME Tương ứng với sự hạn chế của các thiết bị di đô nâ g thì ngôn ngư lâ âp trình cho chúng cũng có phần hạn chế so với trong PC. Trong đó ngôn ngư chiếm thị phần nhiều nhất là J2ME (Java 2 Mobile Edition) do tâ âp đoàn SUN phát triển. Đây là ngôn ngư lâ âp trình Mobile bằng Java. Lâ pâ trình bằng J2ME hay bằng Java nói chung có thể chạy trên nhiều thiết bị phần cứng khác nhau “Write one, run everywhere”, miễn là hỗ trơ môi trường java (JRE – Java Runtime Enviromment). Biểu đồ dưới đây nói lên sự phát triển của các thiết bị di đô nâ g có hỗ trơ máy ảo Java (Java Virtual Machine). Page 6 Lââp trình game di đôâng với J2ME Tin2_K50 Hình 2: Sự phổ biến của các thiết bị hỗ trơ máy ảo Java Tuy nhiên do sự đa dạng của các dòng máy, mỗi dòng hỗ trơ mô ât API riêng để lâ âp trình cho thiết bị đó nên khi làm mô ât ứng dụng có hỗ trơ các tính năng cấp cao như âm thanh, đồ họa thì ta không thể viết code mô ât lần mà phải viết riêng cho từng loại máy và sư dụng thư viê ân mà máy đó hỗ trơ. 2.2 Nền tảng J2ME Mục tiêu của J2ME là cho phép người lâ pâ trình viết các ứng dụng đô câ lâ pâ với thiết bị di đô nâ g mà không cần quan tâm đến phần cứng của máy. Sau đây là phân lớp theo tầng của J2ME đươc xây dựng trên CLDC (thiết bị kết nối hạn chế về cấu hình). Page 7 Lââp trình game di đôâng với J2ME Tin2_K50 Hình 3: Các tầng trong nền tảng J2ME Như vâ ây J2ME gồm các tầng sau:  Tầng phần cứng thiết bị  Tầng máy ảo Java  Tầng cấu hình  Tầng hiê ân trạng 1.2.1 Tầng phần cứng thiết bị Đây là thiết bị di đô nâ g, có bô â nhớ và bô â xư lý. Mă âc dù phần này không phải là mô ât phần của J2ME nhưng nó là “vâ ât chủ” cung cấp phần cứng thích hơp cho viê âc cài đă ât và thực thi các ứng dụng J2ME. Mỗi mô ât thiết bị di đô nâ g khác nhau sẽ có các bô â xư lý khác nhau và tâ âp lê ânh khác nhau. J2ME có vai trò là cung cấp mô ât môi trường chuẩn cho tất cả các loại thiết bị di đô nâ g. 1.2.2 Tầng máy ảo java Khi mã nguồn Java đươc biên dịch nó chuyển đổi thành mã bytecode. Mã này sau đó đươc chuyển thành mã máy của các thiết bị di đô nâ g. Vâ ây có thể nói tầng máy ảo Java (K Virtual Machine - KVM) là bô â biên dịch mã bytecode, có nhiê âm vụ Page 8 Lââp trình game di đôâng với J2ME Tin2_K50 chuyển mã bytecode của chương trình Java thành ngôn ngư máy để chạy trên các thiết bị di đô nâ g. Có nghĩa là thiết bị nào hỗ trơ KVM thì có thể chạy đươc các chương trình J2ME. KVM (Kernel Virtual Machine): máy ảo được thết kế với nhỏ gọn với mục tiêu tiết kiê êm bô ê nhớ thiết bị. Hình 4: Quá trình xây dựng ứng dụng cho thiết bị di động 1.2.3 Tầng cấu hình Tầng cấu hình CLDC (Connected, Limited Device Confinguation – thiết bị kết nối hạn chế về cấu hình) định nghĩa đă câ tả máy ảo KVM và định nghĩa mô ât tâ pâ hơp các lớp có khả năng hỗ trơ diê ân rô âng nhưng thiết bị thuô âc loại CLDC. 1.2.4 Tầng hiê ân trạng Tầng hiê ân trạng MIDP (Mobile Information Device Profile- thông tin thiết bị di đô nâ g) cung cấp các API thân thiê ân cho lâ âp trình viên. Tầng hiê ân trạng đươc xây dựng trên lớp cấu hình và cung cấp nhiều thư viê nâ hơn so với tầng cấu hình. 2.3 Căn bản lâ âp trình J2ME Page 9 Lââp trình game di đôâng với J2ME Tin2_K50 2.3.1 Bô â MIDlet MIDlet là mô ât ứng dụng Java đươc thiết kết để chạy trên các thiết bị di đô nâ g. Mô ât MIDlet chứa các lớp Java dùng bơi CLDC và MIDP. Mô ât bô â MIDlet gồm mô ât hoă âc nhiều MIDlet đươc đóng gói cùng nhau và nén trong file JAR. File JAR sẵn sàng cho viê âc cài đă ât vào điê nâ thoại. Vấn đề của lâ âp trình viên là tạo ra các MIDlet. Sau đây là cấu trúc lâ pâ trình của mô ât MIDlet. Mô ât MIDlet có 3 phương thức: startApp(), pauseApp(), và destroyApp(). Dưới đây là mô ât bô â khung lâ âp trình của mô tâ MIDlet: import javax.microedition.midlet.*; public class MIDletExample extends MIDlet { public public public public void void void void MIDletExample() { } startApp() { } pauseApp() { } destroyApp(boolean unconditional) { } } Thành phần import: Khai báo sư dụng các lớp cần thiết trong thư viê ân MIDP và CLDC. Hàm khơi tạo MIDletExample (): Hàm khơi tạo đươc thực hiê ân mô ât lần khi MIDlet khơi đô nâ g. startApp(): phương thức này đươc gọi bơi bô â quản lý ứng dụng khi khơi tạo MIDlet và mỗi khi MIDlet trơ về từ trạng thái paused. pauseApp(): Page 10 Lââp trình game di đôâng với J2ME Tin2_K50 phương thức này gọi bô â quản lý ứng dụng mỗi khi ứng dụng cần tạm dừng ứng dụng đang thực thi. Khi sư dụng pauseApp ta giải phóng mô ât phần tài nguyên của MIDlet để dành bô â nhớ cho các ứng dụng khác. destroyApp(): Phương thức này đươc dùng khi thoát khỏi MIDlet. Trước đó phải giải phóng hoàn toàn bô â nhớ đươc lấy bơi MIDlet. Có chú ý là tất cả các ứng dụng MIDlet đươc viết ra đều kế thừa từ lớp MIDlet có sẵn trong MIDP. Lớp MIDlet nằm trong gói: javax.microedition.midlet.* . Lớp này quản lý chu kì sống của các ứng dụng MIDlet. Hình 5: Các trạng thái và vòng đời của Midlet 2.3.2 API của J2ME Page 11 Lââp trình game di đôâng với J2ME Tin2_K50 Hình 6: Phân lớp API của J2ME J2ME cung cấp hai mức đồ họa cho lớp MIDlet. Mức cao (High Level) gồm nhưng thành phần như: Textbox, Form, Alert, List … Đă âc điểm của các thành phần mức thấp là tính khả chuyển ( khả năng dùng lại) tuy nhiên các thành phần này không thể thay đổi tùy ý đươc. Thành phân mức thấp (Low Level) chi có Canvas. Lớp Canvas đươc sư dụng trong các chương trình game hay các ứng dụng cần vẽ nhưng đối tương riêng biê ât, đă câ điểm của nó là ít tính khả chuyển, ta thao tác với lớp này để vẽ các đối tương lên màn hình. Lớp Canvas cũng có thể bắt các sự kiê ân bằng nhấn phím bấm. Vì là mức thấp cho phép người lâ âp trình thỏa mái thao tác với màn hình. Cả hai lớp trên đều nằm trong gói; import javax.microedition.lcdui.*; Trong chương trình game em làm có sư dụng cả hai thành phần trên, trong đó các thành phần mức cao (Textbox, List, Form..) để tạo menu game còn mức thấp (Canvas) để tạo ra các nhân vâ ât và giao diê ân game. Page 12 Lââp trình game di đôâng với J2ME Tin2_K50 Phần 2 J2ME Game API Phần mô ât đã nói tổng quan về lâ pâ trình cho di đô nâ g, sau đây em xin đươc bắt tay vào luôn với mô ât mảng kiến thức rất thú vị của J2ME là Game API. Phần hai gồm hai mục: Giới thiê âu lý thuyết Game API của J2ME Công cụ lâ pâ trình Java Game của Netbeans 1. J2ME Game API 1 2 3 4 5 Lớp Canvas Lớp Layer Lớp Sprite Lớp TiledLayer Lớp LayerManager 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 đô nâ g 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 cụ như thế ta có thể làm đươc 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: kế thừa từ lớp Canvas, có thể coi đay là màn hình điê ân thoại  Layer: ít đươc sư dụng trực tiếp nhưng đươc kết bơi lớp Sprite và TiledLayer Page 13 Lââp trình game di đôâng với J2ME Tin2_K50  Sprites: lớp để tạo các nhân vâ ât và các đối tương chuyển đô nâ g  TiledLayer: lớp để tạo các khung cảnh khác nhau của game và tạo bản đồ  LayerManager: lớp quản lý các Sprites và các TiledLayer Ta sẽ đi phân tích từng lớp mô ât. 1.1GameCanvas class GameCanvas kết thừa các thuô âc tính và phương thức của lớp Canvas và có thêm mô ât số phương thức quan trọng giúp cho viê âc giảm thời gian tính toán nhờ đó tăng tốc đô â refresh của màn hình. Nó có thêm hai mơ rô nâ g so với Canvas là Polling Input – lươc bỏ đầu vào và Frame Buffer – dùng vùng đê âm để chứa nô âi dung Canvas. Polling Input Phương thức int getKeyStates() lấy thông tin về phím bấm của điê ân thoại để biết người chơi nhấn nút gì. Để hiểu hàm này ta cần nắm rõ cấu tạo phím bấm của điê ân thoại. Page 14 Lââp trình game di đôâng với J2ME Tin2_K50 Canvas Nhóm các phím có nhiều chức năng UP RIGH T LEFT FIRE DOWN Các phím sô (mô ôt số phím số tương ứng với các phím chức năng) 2   UP 8   DOWN 4   LEFT 6   RIGHT 5   FIRE Hình 7: Nokia Series 40 SDK, 3rd Edition Trong game di đô nâ g người ta thường sư dụng các phím chức năng để thao tác. Mô ât game hoàn chinh có thể chi thao tác với 5 phím chức năng là UP, DOWN, 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 để dễ thao tác. Page 15 Lââp trình game di đôâng với J2ME Tin2_K50 Quay trơ lại với phương thức getKeyStates(); nếu như mô ât phương thức lấy mã của phím nhấn tương tự của lớp Canvas là getKeyCodes() sẽ kiểm tra tất cả các phím xem phím nào nhấn thì phương thức mới của lớp GameCanvas chi kiểm tra với các phím chức năng do đó thời gian nhâ nâ biết đươc phím bấm của lớp GameCanvas sẽ nhanh hơn của lớp Canvas (kỹ thuâ ât này gọi là Polling Input – lươc bỏ đầu vào). Ví dụ nhâ ân biết phím bấm FIRE: int pattern = getKeyState(); if ((pattern & GameCanvas.FIRE_PRESSED) != 0) { System.out.println("Fire!"); } Hơn nưa viê âc lắng nghe mô ât phím đươc bấm bơi người dùng phải đươc đă tâ trong đoạn chương trình lă pâ chính của chương trình while(isRunning) { …} nên tần xuất sư dụng nó là rất lớn. Frame Buffer Kỹ thuâ ât này sư dụng phương thức protected Graphics getGraphics(); để lấy nô iâ dung của Canvas và cho vào bô â đê m â . Ý tương của Frame Buffer là mọi thao tác vẽ trên Canvas sẽ đươc gián tiếp thao tác với vùng đê âm sau đó dùng phương thức public void flushGraphics() để đẩy nô âi dung vùng đê âm ra Canvas. Với cải tiến này thì Frame Buffer có tốc đô â vẽ lên Canvas nhanh hơn là vẽ trực tiếp lên Canvas vì thao tác với vùng đêm ê nhanh la hơn thao tác với mô êt đối tượng Canvas cụ thê, ta chi mất thêm hai thao tác là lấy nô iâ dung Canvas vào đối tương của lớp Graphics với phương thức get và đẩy nô âi dung từ đối tương Graphics vào Canvas với phương thức flush. Cũng giống như thủ tục nhâ nâ biết phím bấm thao tác vẽ lên Canvas cũng đươc đă ât trong đoạn chương trình lă pâ chính nên tần xuất sư dụng là rất lớn. Hơn nưa để đảm bảo hình chuyển đô nâ g đươc “trung thực” – không bị giâ ât thì số lần refresh lại Canvas, tức là số lần vẽ lại phải lớn hơn 24 lần trong 1 giây!. Page 16 Lââp trình game di đôâng với J2ME Tin2_K50 1.2Layer class Trước khi đi đến hai lớp quan trọng tiếp theo là Sprite và TiledLayer ta phải nói về khái niê âm Layer. Lớp layer của Game API rất đơn giản nhưng nó đươc kế thừa bơi hai lớp Sprite và TiledLayer. Layer đươc hiểu là mô tâ khối hình ảnh trong Game. Tất cả các hình ảnh có thể hiê ân đươc trên màn hình đều kế thừa lớp này. Các Layer là nhưng ảnh mà ta có thể vẽ lên màn hình, ẩn đi, di chuyển hay là xắp xếp chúng theo đô â xâu (tức là khi nhiều ảnh chồng chéo lên nhau thì ảnh có đô â xâu lớn hơn sẽ bị ảnh có đô â xâu nhỏ hơn che khuất). Các phương thức của lớp Layer là Public void setPosition(int x, int y): đă tâ vị trí của Layer Public void Move (int dx, int dy): dịch chuyển Layer Public void setVisible (boolean visible): thiết lâ âp hiê ân/ẩn Layer Các phương thức này đều đươc kế thừa bơi các lớp Sprite và TiledLayer. 1.3Sprite Class Sprite là lớp của nhưng đối tương chuyển đô nâ g trong game. Sprite gồm nhưng chức năng không chi vẽ và di chuyển các hình ảnh mà còn có thể xác định va chạm giưa các Sprite với nhau và giưa Sprite với TiledLayer. Sprite cũng có thể quay theo nhưng góc đô â khác nhau. Sprite đươc tạo từ mô ât ảnh bằng phương thức khơi tạo sau: public Sprite(Image image); Reference Pixel – điểm tham chiếu của mô tâ Sprite Theo mă âc định thì vị trí đă tâ ảnh của Sprite là TOP | LEFT tức là căn theo mép trên và mép trái của ảnh. Lớp Sprite hỗ trơ ta thay đổi vị trí tham chiếu này bằng phương thức: public void setRefPixelPosition(int x, int y) Page 17 Lââp trình game di đôâng với J2ME Tin2_K50 Ví dụ khi đă ât mô ât Sprite vào vị trí (0, 0) trên Canvas nhưng nếu vị trí tham chiếu của chúng lại khác nhau thì vị trí tương đối của chúng so với Canvas cũng khác nhau. Ví dụ bằng hình vẽ : Hình 1 Hình 2 Hình 8: Điểm tham chiếu của Sprite Trong hình 1 thì vị trí tham chiếu mă âc định là (0, 0) còn trong hình 2 vị trí tham chiếu là (20, 20). Transforms – quay góc đô â Sprite cho phép chuyển xoay hình ảnh đi mô ât góc nào đó bằng phương thức : public void setTransform(int transform); Có 8 kiểu xoay: TRANS_NONE, TRANS_ROT90, TRANS_ROT180, TRANS_ROT270, tương ứng với 0, 90, 180, 270 đô â theo chiều kim đồng hồ. TRANS_MIRROR, TRANS_MIRROR_ROT90, TRANS_MIRROR_ROT180, TRANS_MIRROR_ROT270: tương ứng với xoay ngươc theo gương, rồi xoay mô ât góc nào đó theo chiều kim đồng hồ. Animation – chuyển đô nâ g Tạo hình ảnh chuyển đô nâ g của nhân vâ ât bằng cách gép nối liên tiếp các hình ảnh gần giống nhau. Ví dụ trong game em làm có sư dụng hình ảnh nhân vâ ât (Player) và chuyển đô nâ g ơ đây tự quay tròn tại chỗ của nó. Để tạo đươc hình ảnh quay như vâ ây thì làm như sau: Page 18 Lââp trình game di đôâng với J2ME Tin2_K50 Hình 9: Nhân vâât Player trong chương trình game Ở trên có mô ât ảnh lớn chứa 16 ảnh nhỏ đươc đánh số từ 0 theo thứ tự từ trái sang phải và từ trên xuống dưới, theo thứ tự này thì ảnh trên tạo nên chuyển đô nâ g quay của nhân vâ ât. Giả sư kích thước của tấm hình lớn là 64x64 pixel thì kích thước của mỗi hình nhỏ là 16x16 pixel. Lớp Sprite cung cấp mô tâ hàm tạo nưa để tạo các Sprite có chuyển đô nâ g. public Sprite(Image image, int frameWidth, int frameHeight);  image ơ đây là ảnh lớn (kích thước 64)  frameWidth là chiều rô nâ g của mỗi ảnh nhỏ (16)  frameHeight là chiều cao của mỗi ảnh nhỏ (16)  bây giờ nếu muốn có ảnh chuyển đô nâ g ta chi tạo mô ât mảng có số phần tư là số ảnh để tạo chuyển đô nâ g, các giá trị của mảng là chi số của các ảnh nhỏ cần ghép tương ứng. Ta gọi chuỗi đó là Frame Sequences. Ví dụ để tạo mô ât Sprite chuyển đô nâ g gồm 16 ảnh nhỏ từ ảnh lớn trên để tạo thành mô ât chuỗi hình ảnh chuyển đô nâ g quay tròn ngươc chiều kim đồng hồ, trước hết ta phải tạo ra đối tương sprite Sprite sprite = new Sprite (playerImage, 16, 16); Page 19 Lââp trình game di đôâng với J2ME Tin2_K50 Sau đó tạo ra mảng các chi số thể hiê ân cho mô ât chuỗi các frames như sau: Int[] frameSequence = { 0, 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; Cuối cùng là gán chuỗi ảnh cho đối tương sprite vừa khai báo. Sprite.setFrameSequence (frameSequence); Kết quả của các bước thao tác trên là mô ât chuỗi các ảnh gần giống nhau xếp liên tiếp nhau: Hình 10: Chuỗi ảnh tạo chuyển đô n â g cho Sprire Nếu muốn cho Sprite hiển thị mô ât frame cụ thể ta dùng phương thức: Sprite.setFrame(int frameIndex); Ta có thể định hướng chuyển đô nâ g bằng các phương thức: public void nextFrame() public void prevFrame() Rectangle Collision – sự va chạm của các sprite có đường biên hình chư nhâ ât Trong lâ âp trình game thì kiểm tra sự va chạm giưa các nhân vâ ât hoă âc giưa nhân vâ ât với các đối tương khác thường xuyên đươc tính đến. Ví dụ để cho nhân vâ ât không phép đươc di chuyển ra ngoài khung màn hình thì phải nhâ ân biết đươc khi nào nhân vâ ât va chạm với biên để nếu có chạm đường biên thì sẽ đổi hướng di chuyển ngươc lại. Mô ât ví dụ khác, để có thể tính điểm cho người chơi thì phải nhâ ân biết đươc khi nào đạn bắn trúng quân địch. Lớp Sprite hỗ trơ 3 loại nhâ nâ biết va chạm với 3 đối tương khác nhau là Image, Sprite và TiledLayer.  public boolean collidesWith(Image image, int x, int y, Boolean pixelLevel);  public boolean collidesWith(Sprite s, Boolean pixelLevel); Page 20
- Xem thêm -

Tài liệu liên quan