Tải bản đầy đủ (.pdf) (50 trang)

Game 3d GL racing trên andriod

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1006.14 KB, 50 trang )

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC SƯ PHẠM

KHOA TIN HỌC

LUẬN VĂN TỐT NGHIỆP
ĐỀ TÀI :
GAME 3D “GL RACING” TRÊN ANDROID

SVTH:

Bùi Thị Phương Đoan

LỚP :

08CNTT2

CBHD :

Nguyễn Thanh Tuấn

Đà Nẵng, Ngày 22/4/2012


LỜI CẢM ƠN

Tôi xin chân thành cảm ơn các thầy cơ giáo trong khoa Tin học cùng tồn
thể thầy cơ của trường Đại Học Sư Phạm Đà Nẵng đã truyền đạt cho tôi những
kiến thức quý giá trong suốt những năm học vừa qua.
Xin chân thành cảm ơn thầy Nguyễn Thanh Tuấn đã tận tình chỉ bảo và


giúp đỡ cho tơi hồn thành đồ án này.
Cuối cùng tơi xin cảm ơn các bạn trong lớp 08CNTT nói riêng và trong
khoa Tin nói chung, những người đã giúp đỡ, chia sẻ những kiến thức, kinh
nghiệm, tài liệu…trong suốt quá trình học tập cũng như nghiên cứu thực hiện đề
tài.
Xin chân thành cảm ơn.
Đà Nẵng, ngày 11/05/2012
Sinh viên thực hiện
Bùi Thị Phương Đoan


LỜI CAM ĐOAN
Tôi xin cam đoan:
-

Những nội dung trong báo cáo này là do tôi thực hiện.

-

Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng
tên tác giả, tên cơng trình, thời gian, địa điểm cơng bố.

-

Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,
tơi xin chịu hồn tồn trách nhiệm.
Sinh viên thực hiện


MỤC LỤC

LỜI CẢM ƠN ......................................................................................................... 2
LỜI CAM ĐOAN ................................................................................................... 3
PHẦN MỞ ĐẦU .................................................................................................... 8

1.

Giới thiệu đề tài:.............................................................................. 8

2.

Mục đích, ý nghĩa của đề tài: .......................................................... 8

3.

Phương án triển khai đề tài: ............................................................ 8

CHƯƠNG 1:

CƠ SỞ LÝ THUYẾT................................................... 10

1.1. Ngôn ngữ C/C++: ......................................................................... 10
1.2. Thư viện đồ hoạ OpenGL và OpenGL ES:................................... 11
1.2.1

OpenGL: ........................................................................................... 11

1.2.2

OpenGL ES: ..................................................................................... 14


1.3. Giới thiệu về Android và IOS: ...................................................... 15
1.3.1

Android: ........................................................................................... 15

1.3.2

IOS: .................................................................................................. 16

1.4 Giới thiệu cơ bản về 3D: ............................................................... 18
1.4.1

Hệ tọa độ 3D: ................................................................................... 18

1.4.2

Quy tắc bàn tay trái – bàn tay phải:.................................................. 18

1.4.3

Xác định một điểm trong tọa độ 3D:................................................ 18

1.4.4

Các phép dịch chuyển cơ bản trong 3D: .......................................... 19

1.5 Cấu trúc game: .............................................................................. 19
1.5.1

Game loof (Vòng lặp game):............................................................ 19


1.5.2

Framerate (FPS): .............................................................................. 20

1.5.3

Bộ nhớ (Memory): ........................................................................... 21

1.5.4

State: ................................................................................................. 21

CHƯƠNG 2: PHÂN TÍCH GAME ...................................................................... 22

2.1 Thiết kế chương trình: ................................................................... 22
2.2 Vịng lặp trò chơi .......................................................................... 23


2.3 Trạng thái trò chơi ......................................................................... 24
2.4 Đặt vấn đề ..................................................................................... 24
2.5 Giải quyết vấn đề: ......................................................................... 25
2.5.1

Cách tải Modle: ................................................................................ 25

2.5.2

Cách xử lý để xe chạy trong bản đồ: ................................................ 29


2.5.3

Cách xử lý độ thông minh nhân tạo(AI) cho xe do máy điều khiển 29

2.5.4

Cách xử lý va chạm giữa các xe ....................................................... 30

2.5.5

Cách xử lý để chương trình chạy được trên android: ....................... 30

CHƯƠNG 3: QUÁ TRÌNH THỰC HIỆN ĐỀ TÀI ............................................. 31

3.1 Xây dựng cấu trúc source: ............................................................ 31
3.1.1

External Dependencies ..................................................................... 31

3.1.2

Header file ........................................................................................ 31

3.1.3

Source file ........................................................................................ 32

3.2 Giải quyết nhiệm vụ cá nhân: ....................................................... 32
3.2.1


Va chạm giữa các xe: ....................................................................... 32

3.2.2

Va chạm giữa xe và map: ................................................................. 35

3.2.3

Chuyển game lên Android: .............................................................. 38

CHƯƠNG 4: KẾT LUẬN .................................................................................... 44

4.1 Kết quả đạt được: .......................................................................... 44
4.1.1

Màn hình “Flag Screen” chứa logo và tên của nhóm: ..................... 44

4.1.2

Màn hình “Menu Screen”: ................................................................ 45

4.1.3

Màn hình “Loading Screen”: ........................................................... 45

4.1.4

Màn hình “Help Screen”: ................................................................. 46

4.1.5


Màn hình “About Screen”: ............................................................... 46

4.1.6

Màn hình “Option Screen”: .............................................................. 47

4.1.7

Modle xe và đích đến: ...................................................................... 47

4.1.8

Cảnh trong Game: ............................................................................ 48


4.2 Những thứ chưa đạt được: ............................................................ 48
4.3 Hướng phát triển: .......................................................................... 48
TÀI LIỆU THAM KHẢO .................................................................................... 50


Danh mục hình ảnh
Chương 2
Hinh 2. 1.Đường ống dẫn trong OpenGL ............................................................. 12
Hinh 2. 2.Đường ống liên kết giữa OpenGL với các API .................................... 14
Hinh 2. 3. Đường ống dẫn trong OpenGL ES. ..................................................... 15
Hinh 2. 4. Biễu diễn hệ tọa độ 3D ........................................................................ 18
Hinh 2. 5. Biễu diễn quy tắc bàn tay trái- bàn tay phải ........................................ 18
Hinh 2. 6. Biễu diễn một điểm trong hệ tọa độ 3D .............................................. 18


Chương 3
Hình 3. 1: Biễu diễn khung thiết kế của chương trình ......................................... 22
Hình 3. 2: Cách kế thừa các lớp trừ tượng trên các nền tảng khác nhau .............. 23
Hình 3. 3: Quá trình vẽ ......................................................................................... 24
Hình 3. 4: Trạng thái của trị chơi ........................................................................ 24

Chương 5
Hình 5. 1. Màn hình Flag Screen .......................................................................... 44
Hình 5. 2. Menu Screen ........................................................................................ 45
Hình 5. 3. Loading Screen .................................................................................... 45
Hình 5. 4. Help Screen ......................................................................................... 46
Hình 5. 5. About Screen ....................................................................................... 46
Hình 5. 6. Option Screen ...................................................................................... 47
Hình 5. 7. Modle xe và đích đến .......................................................................... 47
Hình 5. 8. Cảnh trong game................................................................................. 48


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

PHẦN MỞ ĐẦU
1.

Giới thiệu đề tài:
Với đà phát triển của thông tin di dộng như hiện nay, thiết bị di động trở
thành một trợ thủ không thể thiếu của đa số mọi người. Các trị chơi giải trí
trên di động ngày càng đa dạng. Đặc biệt sự ra đời của hệ điều hành android
và IOS càng tạo ra bước phát triển mới cho các ứng dụng trên di động.
Công nghệ game ngày càng phát triển. Tuy nhiên đa số các game đều làm ở

dạng 2D. Thời gian gần đây một xu hướng game mới là game ở dạng 3D đang
được ưa chuộng. Vì vậy, bản thân em chọn đề tài này nhằm muốn nghiên cứu
về kỹ thuật làm game 3D trên hệ điều hành ANDROID. Bước đầu xây dựng
demo một chương trình game đơn giản phục vụ cho quá trình nghiên cứu và
cơng việc tương lai sau này.

2.

Mục đích, ý nghĩa của đề tài:
¾ Củng cố những kiến thức đã học và nghiên cứu, tìm hiểu hệ điều hành
android, nghiên cứu cơng nghệ làm game 3D.
¾ Nghiên cứu cách xây dựng một game đa nền tảng, và quá trình chuyển từ
windows sang Android.
¾ Xây dựng trị chơi “GL Racing” trên hệ điều hành android, Windows.

3.

Phương án triển khai đề tài:
Để hoàn thành đề tài này, trong quá trình triển khai thực hiện cần tuân thủ
các bước sau:
¾ Lập kế hoạch thực hiện đề tài.

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

8


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn


¾ Thiết kế hệ thống source và dữ liệu.
¾ Xây dựng chương trình (chia nhỏ các chức năng thành các module và
component để giải quyết từng phần).
¾ Củng cố kết quả đã đạt được (bao gồm kiểm thử các module và chức năng
của hệ thống, chỉnh sửa lỗi nếu có và tiến tới hồn thiện chương trình ở mức
có thể).
¾ Song song với các giai đoạn trên là quá trình học hỏi, tích góp tài liệu và
các kiến thức về các công cụ liên quan nhằm phục vụ cho việc xây dựng và
hoàn thiện đề tài.

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

9


Game đua xe 3D trên Andriod

CHƯƠNG 1:
1.1.

GVHD: Th.S Nguyễn Thanh Tuấn

CƠ SỞ LÝ THUYẾT

Ngơn ngữ C/C++:
Ngơn ngữ lập trình là một loại công cụ giúp con người thể hiện các vấn đề

của thực tế lên máy tính một cách hữu hiệu. Với sự tiến hóa của tin học, các
ngơn ngữ lập trình cũng dần tiến hóa để đáp ứng các thách thức mới của thực

tế.
Khoảng cuối những năm 1960, đầu những năm 1970 xuất hiện nhu cầu
cần có các ngơn ngữ bậc cao để hỗ trợ cho những nhà tin học trong việc xây
dựng các phần mềm hệ thống, hệ điều hành. Ngơn ngữ C ra đời từ đó, nó đa
đuợc phát triển tại phịng thí nghiệm Bell. Đến năm 1978, giáo trình “ngơn
ngữ lập trình C” do chính tác giả của ngôn ngữ là Dennish Ritchie và
B.W.Kernighan viết, đã được xuất bản và phổ biến rộng rãi.
C là ngôn ngữ lập trình vạn năng. Ngồi việc C được dùng để viết hệ điều
hành UNIX, người ta nhanh chóng nhận ra sức mạnh của C trong việc giải
quyết các vấn đề hiện tại của tin học. C không gắn với bất kì một hệ điều hành
hay máy nào, và mặc dù nó đuợc gọi là “ngơn ngữ lập trình hệ thống” vì nó
được dùng cho việc viết hệ điều hành, nó cũng tiện lợi cho việc viết các
chương trình xử lý số, xử lý văn bản và cơ sở dữ liệu.
Đặc điểm của ngơn ngữ lập trình C:
9 Tính cơ đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn,
nhưng hầu hết đều đuợc biểu diễn bằng những chuỗi ký tự ngắn gọn.
9 Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình
như cấu trúc lựa chọn, lặp… Từ đó các chương trình viết bằng C được tổ chức
rõ ràng, dễ hiểu.
9 Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

10


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

vô cùng phong phú nên khi chuyển từ máy tính này sang máy tính khác các

chương trình viết bằng C vẫn hồn tồn tương thích.
9 Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển về cú pháp,
chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm
chương trình chạy nhanh hơn.
9 Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng
rẽ thành các tập tin đối tượng (object) và liên kết (link) các đối tượng đó lại
với nhau thành một chương trình có thể thực thi (executable) được thống nhất.

1.2.

Thư viện đồ hoạ OpenGL và OpenGL ES:

1.2.1

OpenGL:

a. Giới thiệu:
Là một bộ thư viện đồ họa mở. Có khoảng 150 hàm giúp xây dựng các
đối tượng và thao tác cần thiết trong các ứng dụng tương tác 3D.
OpenGL h͟trͫFiFKjPÿ
͛h͕a:
- Xây dựng các đối tượng phức tạp từ các thành phần hình học cơ bản
(điểm, đoạn, đa giác, ảnh bitmap).
- Sắp xếp đối tượng trong 3D và chọn điểm thuận lợi để quan sát.
- Tính tốn màu sắc của các đối tượng (màu sắc của đối tượng được quy
định bởi điều kiện chiếu sáng, texture của đối tượng, mơ hình được xây dựng
hoặc là kết hợp của cả 2 hoặc 3 yếu tố đó).
- Biến đổi những mơ tả tốn học của đối tượng và thông tin màu sắc thành
phần các pixel trên màn hình (quá trình này được gọi là rasterization).
- Có API đa nền tảng: Windows, Mac, Linux, Unix.

Các h͏th͙QJGQJÿ
͋nhúng: Iphone, Windows mobile…
'QJFKRÿDQJ{QQJ
ͷ: C, C++, Python, Ruby, PHP…
Dùng cho cả cách vẽ trong 2D và 3D
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

11


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Nhͷng thͱOpenGL khơng h͟trͫ: Bản thân OpenGL khơng có sẵn các hàm
nhập xuất hay thao tác trên window. OpenGL khơng có sẵn các hàm cấp cao
để xây dựng các mơ hình đối tượng, thay vào đó, người dùng phải tự xây
dựng từ các thành phần hình học cơ bản (điểm, đoạn thẳng, đa giác).
Ĉ˱
ͥng ͙
ng d̳
n trong OpenGL: gồm một chuỗi các quá trình xử lư theo
trình tự. Hai đồ họa thông tin, dữ liệu vertex-based và pixel-based, được xử
lý thông qua các đường ống, Kết hợp với nhau sau đó được viết vào frame
buffer. Chú ý rằng OpenGL có thể gửi các dữ liệu đã được xử lý lại cho ứng
dụng của chúng ta.

Hinh 2. 1.Đường ống dẫn trong OpenGL

b. Cấu trúc lệnh trong OpenGL:

OpenGL sử dụng tiền tố gl và tiếp theo đó là những từ những từ được
viết hoa ở chữ cái đầu để tạo nên tên của một lệnh, ví dụ glClearColor().
Tương tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ tiếp sau
đều

được

viết

hoa



cách

nhau

bởi

dấu

’_’

,



dụ:

GL_COLOR_BUFFER_BIT.


SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

12


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Bên cạnh đó, với một số lệnh, để ám chỉ số lượng cũng như kiểu tham số
được truyền, một số hậu tố được sử dụng như trong bảng sau:
Tương ứng với Tương ứng với kiểu

Hậu tố Kiểu dữ liệu

kiểu trong C

trong OpenGL

B

8-bit integer

Signed char

Glbyte

S


16-bit integer

Short

Glshort

I

32-bit integer

Int or long

Glint, Glsizei

F

32-bit floatingpoint

Float

GLfloat, Glclampf

64-bit floatingpoint

Double

Glbouble,

D


Ub

Us

Ui

GLclampd
8-bit unsigned integer

Unsigned char

GLubyte,
GLboolean

16-bit

unsigned Unsigned short

GLushort

integer
32-bit

unsigned Unsigned int or GLuint,

integer

unsigned long

GLenum,


GLbitfield

Bảng 2.1: Một số hậu tố dùng cho lệnh của OpenGL
Ví dụ: glVertex2i(1, 3) tương ứng với xác định một điểm(x, y) với x, y
nguyên.
c. Thư viện OpenGL:
_ Core library
_ OpenGL utility library(GLU)
_ Links với hệ thống window
_ OpenGL Utility Toolkit(Glut)

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

13


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Để khắc phục một số nhược điểm của OpenGL, GLUT được tạo ra với nhiều
hàm hỗ trợ:
- Quản lý window
- Display callback
- Nhập xuất (bàn phím, chuột…)
- Vẽ một số đối tượng 3D phức tạp (mặt cầu, khối hộp…)
_ OpenGL cho hệ thống nhúng:
Mobile phone
PDAS

Video game consoles
_ Hệ tọa độ của OpenGL
OpenGL dùng hệ tọa độ theo quy tắc bàn tay phải.
_ M͙i quan h͏giͷa OpenGL vͣi các API

Hinh 2. 2.Đường ống liên kết giữa OpenGL vói các API
1.2.2 OpenGL ES:
Là một phần mềm giao diện để vẽ đồ họa 3D phức tạp trên các thiết bị
cầm tay và nhúng. Nó chính là thư viện đồ họa cho các thiết bị cầm tay và nhúng
với lập trình 3D phần cứng bao gồm điện thoại di động, PDA, thiết bị, xe cộ, và
hệ thống điện tử. Với OpenGL ES 2.0 thì chúng ta có thể lập trình shader trên các
thiết bị nhỏ và di động.
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

14


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Đường ống dẫn(pipeline) trong OpenGL ES 2.0

Hinh 2. 3. Đường ống dẫn trong OpenGL ES.

1.3.

Giới thiệu về Android một số hệ điều hành khác:

1.3.1


Android:
Android cung cấp một bộ đầy đủ các phần mềm cho các thiết bị di động:

Nó là một hệ thống điều hành, middleware và các ứng dụng di động chủ
chốt. Các Android Software Development Kit (SDK) bây giờ đã có.
Android được xây dựng để cho phép các nhà phát triển tạo ra các ứng
dụng di động hấp dẫn tận dụng tất cả tính năng một chiếc điện thoại đã cung
cấp. Nó được xây dựng để được thực sự mở. Ví dụ, một ứng dụng có thể kêu
gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn
văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển tạo ra
phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho người dùng.
Hơn nữa, nó sử dụng một máy ảo tuỳ chỉnh được thiết kế để tối ưu hóa
bộ nhớ và tài ngun phần cứng trong một mơi trường di động. Android là
mã nguồn mở, nó có thể được mở rộng (liberally).

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

15


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Android không phân biệt giữa các ứng dụng lõi của điện thoại và các
ứng dụng của bên thứ ba. Với các thiết bị xây dựng trên hệ điều hành
Android, người dùng có thể hồn tồn thích ứng với điện thoại đến lợi ích
của họ. Họ có thể trao đổi trên màn hình của điện thoại, những phong cách
của dialer, hoặc bất kỳ ứng dụng.

Android phá bỏ rào cản để xây dựng các ứng dụng mới và sáng tạo. Ví
dụ, một nhà phát triển có thể kết hợp thơng tin từ các trang web với dữ liệu
trên điện thoại di động của một cá nhân – ví dụ như địa chỉ liên hệ của người
dùng, lịch, hoặc vị trí địa lý – để cung cấp một trải nghiệm người dùng có
liên quan hơn. Với Android, một nhà phát triển có thể xây dựng một ứng
dụng cho phép người dùng xem vị trí của bạn bè của họ và được cảnh báo
khi họ đang có trong vùng phụ cận cho họ một cơ hội để kết nối.
Với Android tốc độ nhanh và phát triển ứng dụng dễ dàng.
Android cung cấp truy cập đến một loạt các thư viện cơng cụ hữu ích và
có thể được sử dụng để xây dựng các ứng dụng phong phú. Ví dụ, Android
cho phép các nhà phát triển để có được vị trí của điện thoại, và cho phép các
thiết bị giao tiếp với nhau tạo điều kiện cho đồng đẳng rich-to-peer ứng dụng
xã hội.
Rất nhiều nhà phát triển hệ điều hành Android đã vào cuộc và các ROM
cho Android độc đáo được ra đời với nhiều tích năng nổi trội được tích hợp
và đầy sáng tạo.
Một số hệ điều hành khác:

1.3.2
a. IOS:

IOS được biết đến từ tháng 6 năm 2010. Là một hệ điều hành trên thiết
bị di động của Apple. Đầu tiên nó được phát triển cho iPhone. Sau đó được
mở rộng cho các thiết bị khác của Apple như: Ipod touch, iPad và Apple TV.
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

16


Game đua xe 3D trên Andriod


GVHD: Th.S Nguyễn Thanh Tuấn

IOS là hệ điều hành nổi tiếng nhanh gọn và an toàn của Apple. IOS trên
Iphone là một hệ điều hành đa nhiệm (chúng ta vừa có thể duyệt web và vừa
tải một cái gì đó từ trên mạng về), được cài đặt trình duyệt web Safari an
tồn và tốc độ nhanh.
Hệ điều hành IOS hỗ trợ Unicode, đây là điều rất được quan tâm tại thị
trường việt Nam. Ngoài ra các phần mềm như từ điển mở, phần mềm văn
phòng mở…
Hệ điều hành Iphone được nhúng vào dưới dạng 1 firmware, dùng để
restore, update trực tiếp từ iTunes (thư viện âm nhạc, ứng dụng … khổng lồ
của Apple) khi cài IOS Iphone vì nó là 1 dạng firmware nên chúng được nhớ
trên chip, Rom phần cứng của Iphone, nhằm ngăn chặn hacker, những người
bẻ khóa. Chính vì điều này mà mỗi khi chúng ta update hay restore lên phiên
bản mới thì chúng ta sẽ khơng thể restore về phiên bản cũ trước đó.
b. Window mobilbe:
Window mobile là một hệ điều hành loại thu gọn kết hợp với một bộ các
ứng dụng cơ bản cho các thiết bị di động dựa trên giao diện lập tr.nh ứng
dụng Win32 của Microsoft. Windows Mobile ra đời phục vụ cho một thế hệ
smartphone mới với khả năng tăng sức mạnh kết nối, liên kết các thiết bị cũng
như đồng bộ và cài đặt thêm nhiều ứng dụng tiện ích Windows Live, Hotmail,
Messenger...
Windows CE là tiền thân của Windows Mobile ngày nay. Một trong
những phiên bản Windows CE đầu tiên với màn hình grayscale.
Windows CE 1.0 được dùng trong Palm-Size PC từ năm 1998, nhưng
trước đó nó đ. được dùng trong các Handheld PC từ năm 1996.
Windows Mobile là hệ điều hành quản lí tốt nhấtdanh bạ, và tính năng
tìm kiếm được đơn giản hóa. Hỗ trợ các chức năng quay số thông minh
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2


17


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

(Smartdial) cùng khả năng liên kết danh bạ với hộp thư tiện lợi, chức năng
ghi âm nhanh…

1.4

Giới thiệu cơ bản về 3D:
1.4.1

Hệ tọa độ 3D:

Được định nghĩa bởi 3 trục tọa độ: ox, oy, oz.

Hinh 2. 4. Biễu diễn hệ tọa độ 3D

1.4.2

Quy tắc bàn tay trái – bàn tay phải:

Hinh 2. 5. Biễu diễn quy tắc bàn tay trái - bàn tay phải

1.4.3


Xác định một điểm trong tọa độ 3D:

Cho điểm P (Px, Py, Pz) trong tọa độ 3D. Ta biểu diễn như sau:

Hinh 2. 6. Biễu diễn một điểm trong hệ tọa độ 3D

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

18


Game đua xe 3D trên Andriod

1.4.4

GVHD: Th.S Nguyễn Thanh Tuấn

Các phép dịch chuyển cơ bản trong 3D:
- Phép tịnh tiến (translate).
- Phép biến dạng (Scale).
- Phép quay (Rotate).
- Phép chiếu phối cảnh.
- Phép trực giao (Phép chiếu vng góc)...

1.5 Cấu trúc game:
1.5.1 Game loof (Vòng lặp game):
Là thành phần quan trọng của bất kỳ game nào. Game loop giúp game
chạy ổn định hơn không bị ảnh hưởng bởi tác động của người dùng.
Hầu hết các chương trình truyền thống đều đáp ứng thơng điệp đưa vào
của người dùng . Ví dụ như: word thì định dạng và text theo những gì người

dùng nhập vào, nếu người dùng khơng nhập vào thì nó khơng làm gì cả.
Nhưng đối với một chương trình game thì dù người dùng có nhập vào thơng
điệp hay khơng thì nó vẫn thực hiện theo một cấu trúc chương trình có sẵn đây
chính là vịng lặp của game.
Một vịng lặp game rất đơn giản nó có thể trông như thế này:
While ( user doesn't exit )
check for user input
run AI
move enemies
resolve collisions
draw graphics
play sounds
end while
Các vòng lặp game có thể thay đổi như sự phát triển của game nhưng hầu
hết chúng đều dựa trên ý tưởng cơ bản này.
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

19


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Vòng lặp game khác nhau tùy thuộc vào nền tảng mà nó phát triển.Vịng
lặp game được thực hiên thơng qua 2 hàm chính là Update và Paint.

1.5.2 Framerate (FPS):
Số lần vẽ khung hình trên một giây. Framerate chậm sẽ làm cho người
dùng khơng có cảm giác thật, ảnh hưởng đến sự tương tác của người dùng

với trị chơi.
¾ Các yếu tố làm cho framerate chậm:
‹ Hình vẽ có kích thước lớn.
‹ Tính tốn trong game nhiều.
‹ Lỗi của thiết bị.
¾ Cách cải thiện framerate
 Tối ưu hóa tính tốn và các điều kiện thực hiện trong game:

+ Sử dụng ít vịng lặp.
+ Dùng phép toán dịch chuyển bit thay cho phép nhân và phép chia.
+ Khai báo các biến và phương thức ở dạng static.


Caching module của các file ảnh, tối ưu hóa các module dùng để

vẽ sao cho số lượng module vẽ ra là ít.


Dùng Bacbuffer: Khơng vẽ từng sprite ra màn hình mà ta vẽ các

sprite lên một ảnh sau đó vẽ ảnh đó ra màn hình.
 Bỏ các hiệu ứng khơng cần thiết.

¾ Limit Frame rate
Là sự giới hạn lại số lần vẽ trên một giây của trò chơi. Nhằm mục
đích dùng trong những trường hợp ứng dụng có frame rate q nhanh, sẽ
làm cho ứng dụng khơng ổn định. Ảnh hưởng đến quá trình xử lý, người
chơi khơng chơi kịp và một điều nữa là nó dẫn đến việc nhanh hết pin
của thiết bị.


SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

20


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

1.5.3 Bộ nhớ (Memory):
Là kích thước bộ nhớ có thể dùng để chạy chương trình game của thiết bị.
¾

Các y͇
u T͙̫QKK˱
ͧQJÿ
͇
n b͡nhͣtrong game


File ảnh dùng trong game.



Âm thanh dùng trong game.



Các file text, mng cha text trong game.




T
LXKyDE
nh
ã

n gin húa cỏc frame và hình ảnh động.



Chia ảnh ra thành các module nhỏ.



Xóa các module của dữ liệu sau khi lưu vào bộ nhớ tạm (caching).



Dùng gói âm thanh có dung lượng nhỏ, tải âm thanh khi chạy

sound và giải phóng (free) khi dừng sound.


Dùng mảng một chiều thay vì dùng mảng 2 chiều.



Chỉ giữ những đối tượng cần thiết trong bộ nhớ. Để tránh vấn đề


phân mảnh bộ nhớ (là các đối tượng thường dùng (fonts, main
characters, common interface sprites, … ) ).


Tải lên khi muốn vẽ và giải phóng khi đi ra khỏi màn hình.



Tránh phân mảnh bộ nhớ: load đối tượng có kích thước lớn trước.

Giữ cho bộ nhớ ổn định. Khơng load và giải phóng q nhiều lần.

1.5.4 State:
Là các trạng thái của một game. Chúng có liên quan chặt chẽ với
nhau.Thơng thường một game thường có các trạng thái sau: mainmenu,
gamestart, gamewin, gameover, about, highscore, Exit…

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

21


Game đua xe 3D trên Andriod

CHƯƠNG 2:

GVHD: Th.S Nguyễn Thanh Tuấn

PHÂN TÍCH GAME


2.1 Thiết kế chương trình:
Dựa vào các phân tích, ta có thiết kế khung của một chương trình.

Hình 3. 1: Biễu diễn khung thiết kế của chương trình

- Lớp Application là bộ giao tiếp giữa ứng dụng và các nền tảng.
- Lớp FileSystem là lớp trừu tượng được dùng để thực hiện các hành động
đọc/ghi tập tin.
-Lớp VideoDriver: là lớp cài đặt các phương thức vẽ hình liên quan đến
OpenGLES 2.0.
- Lớp Sprite2DManager, Sprite3DManager là lớp chịu trách nhiệm tải các
đối tượng 3D cũng như giao diện 2D và vẽ lên trong chương trình.
Ở mỗi nền tảng các đối tượng này sẽ được kế thừa và cài đặt khác nhau nếu
cần thiết.
SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

22


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn

Hình 3. 2: Cách kế thừa các lớp trừu tượng trên các nền tảng khác nhau

Ỉ Đây là bộ khung cần thiết để chúng ta tiến hành xây dựng các thành phần
trong chương trình.

2.2 Vịng lặp trị chơi:
Chúng ta thực hiện vòng lặp trò chơi qua hai phương thức của lớp

Application, đó là phương thức Update() và Render().
- Phương thức Update: cập nhật trạng thái của trò chơi.
- Phương thức Render: Render nội dung của trị chơi ra màn hình thiết
bị.
Do trị chơi bao gồm nhiều giao diện (bảng chọn chính, xem điểm cao,
xem giới thiệu, chơi game…). Chúng ta sẽ khai báo một biến trạng thái để lưu trữ
trạng thái hiện tại. Sau đó ở hàm Update và Render, chúng ta sẽ dựa vào biến
trạng thái này để cập nhật trò chơi.
void UpdateGame(int type)
{
switch (s_iCurrentState)
{
case GAME_START:
UpdateGameStart(type);
break;
case MAIN_MENU:
UpdateMainMenu(type);


Ứng với mỗi trạng thái ta sử dụng một chỉ thị để xác định hành động hiện
tại là Paint hay Render. Ngoài ra mỗi trạng thái cần có các hành động để tải và
hủy bỏ các đối tượng trên.
-

UPDATE: Cập nhật trạng thái hiện tại.

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

23



Game đua xe 3D trên Andriod

-

GVHD: Th.S Nguyễn Thanh Tuấn

PAINT: Vẽ trạng thái hiện tại.
CTOR: Tải các đối tượng cần thiết để vẽ và tính tốn trạng thái hiện
tại.
DTOR: Hủy bỏ các biến đã sử dụng trong trạng thái hiện tại.

Hình 3. 3: Q trình vẽ

2.3 Trạng thái trị chơi:

Hình 3. 4: Trạng thái của trò chơi

2.4

Đặt vấn đề: Để tạo ra một game đua xe ta cần xử lý các vấn đề:

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

24


Game đua xe 3D trên Andriod

GVHD: Th.S Nguyễn Thanh Tuấn


o Cách load modle 3D.
o Cách xử lý để xe chạy trong map không bị chạy ra khỏi bờ tường
o Cách xử lý AI
o Cách xử lý va chạm
o Cách xử lý để chương trình chạy được trên android.

2.5 Giải quyết vấn đề:
2.5.1 Cách tải Modle:
¾

Để tải modle trước tiên ta phải đọc file .obj để lấy vị trí các đỉnh,

textcoord, vectơ normal của object. Đoạn code thực hiện:
while

(! feof(f)) {

fscanf(f,

"%s" ,temp);

if (strcmp(temp,

"vn" ) == 0)

{
fscanf(f,

"%f %f %f" ,&index[0], &index[1], &index[2]);


normaltemp.push_back(index[0]);
normaltemp.push_back(index[1]);
normaltemp.push_back(index[2]);
}
else if

(strcmp(temp, "vt" ) == 0)

{
fscanf(f,

"%f %f %f" ,&index[0], &index[1], &index[2]);

textcoordtemp.push_back(index[0]

);

textcoordtemp.push_back(index[1]);
}
else

if

(strcmp(temp, "v" ) == 0){

fscanf(f,

"%f %f %f" ,&index[0], &index[1], &index[2]);


verticestemp.push_back(index[0]);
verticestemp.push_back(index[1]);
verticestemp.push_back(i

ndex[2]);

}
else if

(strcmp(temp,

"mtllib"

) == 0)

{
getString =

new char [1024];

SVTH: Bùi Thị Phương Đoan, Lớp: 08CNTT2

25


×