1. Trang chủ
  2. » Tất cả

Nghiên cứu engine game cocos2d x lập trình game mobile đa nền tảng ứng dụng xây dựng game đuổi bắt

70 10 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu engine game cocos2d-x lập trình game mobile đa nền tảng ứng dụng xây dựng game Đuổi bắt
Tác giả Tạ Văn Dậu
Người hướng dẫn Ths. Mai Thị Thúy Hà
Trường học Viện Đại Học Mở Hà Nội
Chuyên ngành Công nghệ Thông tin
Thể loại Đồ án tốt nghiệp đại học
Năm xuất bản 2014
Thành phố Hà Nội
Định dạng
Số trang 70
Dung lượng 3,73 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhưng việc pháttriển game riêng cho từngnền tảng hệ điềusẽ tốn rất nhiều thời gian vàcôngsứccùa các lập trình viên.Và thật lãng phí khi một tựa game hay lại chi xuất hiện trên một nền tá

Trang 1

ÚNG DỤNG XÂY DỤNG GAME ĐUÓI BẮT

Chuyênngành: Côngnghệ thông tin

ĐỒÁN TỐT NGHIỆP ĐẠIHỌC

HàNội-Năm 2014

Trang 2

TẠ VĂN DẬU

NGHIÊN CỨU ENGINE GAME COCOS2D-X LẬP TRÌNH GAME

MOBILE ĐA NÈN TẢNG.

ÚNG DỤNG XÂY DựNG GAME ĐUÓI BÁT

Chuyênngành: Công nghệ thông tin

Cán bộ hướng dần:Ths.MaiThị Thúy Hà

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC

HàNội - Năm 2014

Trang 3

NHIỆM VỤ CỦA ĐÒ ÁN TỐT NGHIỆP

Họ và tên : Tạ Văn Dậu Giới tính : Nam

Ngày, tháng, năm sinh : 02/02/1993 Nơi sinh : Vĩnh Phúc

Chuyên ngành : Công nghệ thông tin Mãsố :

1 TÊN ĐÈ TÀI

Nghiên cứu engine game cocos2d-x để lập trình gamemobile đa nềntảng, ứngdụng vào làmgameĐuổi bắt

Nhiệm vụ cụ thể cùađồántốtnghiệp:

- Tìm hiểu và nghiên cứu engine game cocos2d-x

- Phân tích vàxác định cácyêucầuđối với game mobile

- Xâydựng game Đuối bắt

- Triển khai đa nềntảng

5 CÁN Bộ HƯỚNG DẲN: Ths Mai Thị Thúy Hà

Nội dungvàđềcương Đồ án đã được Hội đồngchuyên ngành thôngqua

Hà Nội, ngày thảng năm 2014

Mai Thị Thúy Hà

Trang 4

phần cứng vàchạytrênnhiều nền tánghệ điều hành khác nhau Cáchệ điều hành phổ biếnhiện naycó thề kế đếnnhư là ÍOS (Apple), Android (Google),

Window Phone (Microsoft), Vi vậy nhu cầu ve phần mem nói chung và game mobile nói riêng ngày càng lớn Hiện nay thông thường cáclập trình

viênchi phát triến gametrênmộtnền táng sau đómới phát triền cho các nền

tảng khác, côngviệcnày tốn rất nhiều thời gian và công sức cho các nhàphát

triển trong việcbảo tri, nâng cấpphần mem,game Vì vậy việc lập trìnhgame

đanềntáng là mộthướng đi mới,phải vận dụng kiến thứctrên nhiềuhệđiềuhành,trên nhiều nềntảng Hiện nay có rất nhiềuengine-game ra đời phục vụ

choviệclập trình game đa nền tảng như: Unity, Appcelcrator Titanium, Game

Salad, SpriteKit, Cocos2D,Cocos2d-X Vi vậy em đã lựachọn nghiên cứu

mộtloại engine-gametrongđồ ántốt nghiệp đạihọc cùamình Và đềtài tốtnghiệp của em là: “Nghiên cứu engine game Cocos2d-Xđê lập trinh game

mobile đa nền tảng, ứng dụng làm làm game Đuổibắt “

Em xingửi lời cám ơn đếncác Thầy, Cô khoa Côngnghệ Thôngtin

trường Viện Đại học Mớ HàNội đã tậntình dạy dồ, dìu dắt em suốt bốn nămđại học,các thầy đã cho em những kiến thức và kinh nghiệm cần thiết nhất đế

có the thực hiện đề tài này Em xin gửilờicám ơn chânthànhtới Ths Mai Thị Thúy Hà, người hướng dẫn, giúpđỡ, động viên em hoàn thành đồ án

này

Dothời gian cóhạn, kiếnthức và kinh nghiệm củabân thâncòn hạn che,

đồán còn nhiều thiết sót,em mong nhận được những ýkiếnđónggópquýbáu từ thầy cô và các bạn đồng nghiệp đe đồ án được hoàn thiện hơn

Emxin chân thành cảm ơn !

Trang 5

Chương 1 1

TỐNG QUAN VÈ ĐÈ TÀI 1

1.1 Đặt vấn đề 1

1.2 Mục tiêu và phạm vicủađề tài 1

1.3 Đối tượng và phương phápnghiên cứu 2

Chương 2 3

CÔNG NGHỆ SỬ DỤNG PHỤC vụ ĐÈ TÀI 3

2.1 Ngôn ngừ lậptrìnhC++ 3

2.1.1 Kháiniệm về lậptrình hướng đốitượng 3

2.1.2 Phương pháp lập trình hướng đối tượngtrong C++ 3

2.2 Tìm hicu engine game cocos2d-x 5

2.2.1 Kháiniệm game engine 5

2.2.2 Game engine Cocos2d-X 6

2.3 Công cụTileMap và ứngdụngtrong Cocos2d-X 27

2.3.1 TileMap 27

2.3.2 TilcMap trong lập trình Cocos2d-X 29

Chương 3 32

PHÂN TÍCH VÀ THIÉT KÉ HỆ THÓNG 32

3.1 Xây dựng ý tưởng 32

3.2 Kịch bảngame 33

3.3 Phân tích hệ thống game 35

3.3.1 Qui trình xửlý 35

3.3.2 Mô hình tiến trìnhnghiệpvụ 36

Trang 6

3.4.1 Thiết kế Map 38

3.4.2 Thiết kếnhânvật 42

Chương 4 47

TRIÉN KHAI ĐA NỀN TẢNG 47

4.1 Xây dựng tròchơi trên Win32 47

4.2 Xây dựng trò chơi trên Android 50

4.3 Xây dựng trò chơitrên ÍOS 55

KÉT LUẬN 59

TÀI LIỆU THAM KHẢO 60

Trang 7

- Chuyên ngành: Côngnghệ thông tin Khóa: 2011- 2015

- Cán bộ hướng dẫn: Ths Mai Thị Thúy Hà

- Tên đề tài:Nghiên cứu engine gamecocos2d-xlập trình gamemobile

đa nền táng, ửngdụngvào làm game “Đuổibắt”

- Tómtắt đề tài:

Nghiên cứu engine gamecocos2d-x phiên bán 2.2.3 vớingôn ngữ lập trình C++ Tìm hiểu và ứngdụng công cụ tạo bán do game - Tilemaptronglậptrình game với cocos2d-x.Xây dựnggameđuồi bắtdựatrên các đối tượng đã nghiên cứu ởenginegamecocos2d-x Triển khai game trên

các nền tảng hệ điềuhanh di động như Android, iOSvà Window Phone

Trang 8

STT Tên viết tắt Tên đầyđủ Dịchđầyđùra tiếng Việt

1 ADT Android Development Tools

Bộcôngcụpháttriến Andoroid

2 NDK Native DevelopmentKit Bộcôngcụphát triến

5 PC Personal Computer Máy tính cá nhân

6 RAM Random Memory Access Bộ nhớtruy cậpngẫu

nhiên

Trang 9

Hình 2.2 Code trong hàm applicationDidFinishLaunching 8

Hình 2.3 Sơ đồ lớp CCNode 12

Hình 2.4 Hệ thống tọa độ trong cocos2d-x 13

Hình 2.5 Ví dụ về thiếtlập AnchorPoint trong cocos2d-x 14

Hình 2.6.Một Scene game đơn giàn 15

Hình 2.7 Sơ đồcấu trúc cây Scene 16

Hình2.8.Thuộc tính Zorder của sprite 20

Hình 2.9 Thựchiện animation cho sprite 20

Hình 2.10 Thựchiện lần lượt animation chomộtsprite 21

Hình 2.11 File pngcúa font fnt 26

Hình 2.12 CCLabelBMFont(tren) và CCLabelTTF(dưới) 27

Hình2.13Các thuộctínhcủa1Object trong TilcMap 28

Hình2.14 Các đối tượng cần chú ý trongtilemap Editor 29

Hình2.13 Cácđối tượng trong ObjectGroup “object” 30

Hình 3.1 Quy trình xừlý game 35

Hình3.2 Môhìnhtiếntrình nghiệp vụ 36

Hình3.3Sơ đồ Activity Diagram 37

Hình 3.4 Tạo một tilemap mới 38

Hình 3.5 Add backgroudLayer 38

Hình3.6 Tạo tileset mới 39

Hình3.7 Thêmtileset mới 39

Hỉnh3.8.Các tileset 40

Hình 3.9 Thêm tileset vào map 40

Hình 3.10.TạoObjecttrong tilemap 41

Hình 3.11 Tạolayer xác định các va chạm 41

Trang 10

Hình 3.14 Thiết kế cáctrạng thái cúanobita 43

Hình 3.15 Thiết kếcác vật cản 43

Hình 3.16 Giao diện Menu 44

Hình 3.17 Giao diện màn chơi 44

Hình 3.18 Giao diện màn chơi 45

Hình 3.19 Giao diện mànchơi 45

Hình3.20Màn hình kết quảgame 46

Hình3.21 Màn hìnhkết quá game 46

Hình 4.1 Thư mụccocos2d-x 47

Hình 4.2 Cấutrúc solutionCocos2d-X 48

Hình 4.3 Build solution Cocos2d-X 48

Hình 4.4 Debug 49

Hình 4.5.Khi build project thành công 49

Hình4.6.Thêm biến môi trường NDK 51

Hình 4.7.Thêm biếnmôi trường Cygwin 51

Hình 4.8 Import project DuoiBat vàthư việnlibcocos2dxvào eclipse 52 Hình 4.9 Import project hcllococos thành công vào eclipse 52

Hình 4.10.Android.mk 53

Hình 4.11 Buildprojectthànhcông trong eclipse 53

Hình 4.12.Buildrafile apk thànhcông 54

Hình 4.13 Mở project iOS 55

Hình4.14 Cấu trúc thư mục project cocos2d-x-ÍOS 56

Hình 4.15 Thêm Resource 57

Hình4.16 Chọn iPhone Simulator 57

Hình4.17.Buildthànhcông 58

Trang 11

Chương 1TÓNG QUAN VÈ ĐÈ TÀI 1.1 Dặt vấn đề

Ngày nay khi đờisống, xãhội ngày càngphát triểnvàmứcsống cúa conngười ngày càngđược nâng cao, cải thiện và cùngvới đó làviệc phát

triềnmạnh mẽ và phố cậpcúa các dòngđiện thoại thông minh thì nhucầugiái trívà chơi game trên di động của mọi người ngày càng tăng và phát triểnmộtcách chóng mặt Nhưvậytrong thời gian sắptớithị trườngứng dụng và game

diđộngsẽ rất phát triển,và để bắt kịpxu thế đóemchọn cho mình một hướng

đi là lập trình gameđi động

Nhưng việc pháttriển game riêng cho từngnền tảng hệ điềusẽ tốn rất

nhiều thời gian vàcôngsứccùa các lập trình viên.Và thật lãng phí khi một

tựa game hay lại chi xuất hiện trên một nền táng như Androidhoặc ÍOS Đế

khắc phục điều đó hiện nay có rất nhiều bộ thư viện phát triếngame được gọi

là các engine game hỗ trợ việc phát triển game trênnhiều nền tảng trong cùngmột thờigian Trong đó cóenginegamecocos2d-x

Chính vì vậy em chọn đề tài nghiên cứu engine gamecocos2d-xđe lập trình game đi động đa nền táng vớimong muốncóthếlập trình được những game chất lượng vàcóthể chạy được trênnhiều nền táng hệ điềuhành khácnhau

1.2 Mục tiêu và phạm vi của đề tài

4- Mục tiêu

Tìm hiếu được cấu trúc, nguyên lý hoạtđộng, các thành phần cơbànvà

cách sửdụng engine gamedi động đa nền tăng cocos2d-x

Trang 12

Tìm hiếu và áp dụng được enginegamecocos2d-xđếlậptrình game trêncác hệ điệu hànhĨOS và Android.

Lập trình được game trên hệ điều hành android, iOS có lối chơi đơn gián,tiết tấu nhanh và cách chơiđộc đáo, cuốnhútngười chơi

ứng dụng cácnghiên cứu đế đivào lập trình game“Đuốibắt”

4- Phạm vi đề tài

Nghiên cứu engine game cocos2d-x phiên bàn 2.2.3 với ngôn ngừ lập

trình C++

Tậptrung lập trinh vàtối ưugame trên hệ điều hành androidvà iOS

1.3 Đối tượng và phương pháp nghiên cứu

4- Đốitượng nghiên cứu

- Ngôn ngữ lập trình C++

- Engine game cocos2d-xphiên bán 2.2.3

- Công cụ TilcMap và ứng dụngtrong cocos2d-x

- Cácđối tượng can de trien khai game trên hệ điều hành Android

- Cácđối tượng cần đề triển khai trên hệ điều hành ÍOS

4- Phương pháp nghiên cứu

- Đọc,hiểu engine game cocos2d-x

- Phân tích và thiết kế hệ thống gametheo hướng đốitượng

- Từ nhữngphântích đó,tông hợplạiđê xây dựng game

Trang 13

Chuông 2 CÔNG NGHỆ sủ DỤNG PHỤC vụ ĐÈ TÀI

2.1 Ngôn ngữ lập trình C++

2.1.1 Kháiniệm vềlập trình hướng đối tượng

Lập trình hướng đối tượng (gọi tắt là OOP, từ chữAnh ngừ object-

oriented programming),hay còn gọi làlập trình địnhhướng đối tượng, làkĩ thuật lậptrình hỗ trợ công nghệ đối tượng.OOPđược xem là giúptăngnăngsuất, đongiàn hóađộ phức tạpkhi bảo trìcũngnhưmởrộngphần mềm bàng

cách cho phép lập trình viêntập trung vào các đối tượng phần mềm ở bậc caohơn Ngoài ra, nhiều người còn chorằng OOP dễ tiếpthu hơn cho những

ngườimớihọc về lập trình hơn làcác phương pháptrước đó

Một cách giản lược, đây làkhái niệmvà là mộtnồ lực nhằm giám nhẹ cácthao tác viết mã cho người lập trình, cho phép họtạo ra cácứng dụng mà các yếu tố bên ngoài cóthếtương tác với các chương trình đó giống nhưlàtương tácvớicác đối tượng vật lý

Những đối tượng trong mộtngôn ngữ OOP là cáckết hợp giữa mã vàdừ liệu mà chúng được nhìn nhận nhưlà một đơn vị duy nhất Mỗi đối tượng có một tênriêng biệt và tấtcả cáctham chiếu đến đối tượng đó đượctiến hành

qua tên cùa nó Như vậy, mỗi đối tượng có khảnăng nhận vàocác thông báo,

xứ lýdừ liệu (bên trong cúa nó),và gửira haytrá lờiđến các đối tượng khác hayđếnmôi trường

2.1.2 Phươngpháp lập trinh hướng đối tượng trong C++

Kháiniệm trung tâm của lập trình hướng đối tượng làlóp (class).Cóthexem lớplàsự kết hợp các thành phần dữ liệu và các hàm Cũng có thê

Trang 14

xem lớplà sự mở rộng của cấu trúctrong c(struct) bằng cách đưa thêm

vào các phương thức (method) hay cũng gọi là hàm thành viên (member function) Mộtlớpđược định nghĩanhưsau:

Class Tên Lớp

{

// Khai háo các thành phần dữ liệu

//Khai báo các phương thức

};

Cácphương thức cóthếđược viết(xây dựng) bên trong hoặc bênngoài

(phíadưới) phần định nghĩa lớp cấu trúc(cách viết)phương thức tươngtự

như hàmngoại trừquy tắc sau: Khi xây dựng một phương thức bênngoài

địnhnghĩa lớp thì trong dòngđầu tiên cần dùng tên lớp và 2 dấu : đặt trướctên phươngthức đềchi rừ phương thứcthuộc lớp nào)

Sửdụng các thànhphần dữ liệutrong phương thức:Vì phương thức và các thành phần dừ liệu thuộc cùngmộtlớpvàvì phương thức đượclập lên cốt

đexứlý các thànhphầndữliệu, nêntrong thâncùa phươngthức có quyền

truynhậpđến các thànhphần dữ liệu (củacùnglóp)

Biến lớp: Saukhi định nghĩamộtlớp, cóthế dùng tên lớpđe khai báo các biến kiều lớp hay cũnggọi làđốitượng Mỗiđối tượng sẽcó các thành phầndừ liệuvà các phương thức.Lời gọi một phương thức cầnchứa tên đối

tượng để xác địnhphương thức thựchiện từ đối tượng nào

Mộtchương trình hướng đối tượng sẽ baogồm các lópcóquanhệ vớinhau

Việc phân tích, thiết kế chương trình theo phươngpháp hướng đốitượng nhằm thiếtkế,xây dựngcác lóp

Trang 15

Từ khái niệm lớp nẩy sinh hàngloạtkhái niệm khác như: Thành phần

dữ liệu,phương thức, phạm vi, sự đóng gói,hàm tạo, hàm huý,sự thừa kế,

lớpcơ sử, lớp dẫn xuất, tương ứng bội, phương thức ảo,

Ưu điểm của việcthiết kế hướng đối tượng là tập trungxác định các lớp

đe mô tảcác thực the của bài toán Mỗilớpđưa vào cácthành phầndữ liệu cùa thực thể và xây dựng luôn các phương thức đểxử lý dữ liệu Nhưvậy

việc thiết kế chương trình xuất phát từ các nội dụng, các vấn đề của bài toán.Các ngônngữ thuầntuý hướng đối tượng (như Java, Objective-C) chỉ

hồ trợ các khái niệm về lớp, không có các khái niệm hàm

C++ làngônngừ lai , nóchophép sứdụng cá các công cụ cúalớpvà hàm

2.2 Tìm hiểu engine game cocos2d-x

2.2.1 Khái niệm game engine

Game enginelà một bộ thư viện được viết đế thiết kế và phát

triển video game,hiểu đơngiản nó là loại phầnmềmtrung giankết nốitương

tác cùa nhiều ứng dụng trongcùng 1 hệ thốngvới nhau Có rất nhiều loại

game engine dùng đếthiếtkế game chocác hệmáy như hệconsoles hay máytính cá nhân(PC) Chức năng cốt lõi của game engine phần lớn nằm trong

công cụ dựng hình (kết xuấtđồ họa)cho các hình ảnh2chiều (2D)hay 3

chiều(3D), công cụvật lý (hay côngcụ tính toán và pháthiện va chạm), âmthanh,mã nguồn, hình ánh động (animation), trítuệ nhântạo, phân luồng, tạo

dòng dữ liệuxứ lý,quán lý bộ nhớ,dựng ánh đồ thị, vàkết nối mạng Quá

trình phát triển gametiết kiệm được rấtnhiều thời gian và kinh phívào việc

tái sửdụng vàtái thích ứng một engine đê tạo nhiêu game khác nhau

Trang 16

2.2.2 Game engine Cocos2d-X

Cocos2d-X làmột gameengine hồ trợ đa nền tảng do các lập trình viênTrung Quốc phát triên, được viết trên nềnbộ thư viện đồhọa Open GL.Cocos2d-Xhồ trợ chủyếu3 ngôn ngừ : C++, lua và javascript

Website: http://cocos2d-x.org

Đâylà game enginemã nguồn mở, hồ trợ môi trường lậptrình trên các

hệ điềuhành PCnhư Window,MacOS X, Linux

Cocos2d-X hồ trợ phát triển game cho các nền táng di động như:

Android, iOS, Windows Phone 8,Black Berry, Tizen và còn có the phát triển game cho các hệđiều hành PC như Window, Mac osx, các hệ điều hành nhân Linux

Có 1 phiên bảndànhriêng cho phát triền game trênhệđiều hành ÍOS là Cocos2d

CóI bộ công cụ Cocostudio hồtrợ tạo giaodiện, animation

2.2.3 Các thànhphần cơ bảncúa Cocos2d-X

Trang 17

2.2 3.1 Cấu trúc mộtchươngtrình trongcocos2d-x

Hình 2.1 Cấutrúc 1 chương trìnhtrong cocos2d-x

Như hầu hếtcác chương trìnhmáytính khác, mọichương trình khi viết

mã đều có một điểm khới động được gọilà hàm main Trong cocos2d-x điểm

khởi động chươngtrình được bắt đầu bằng việc: Khi 1 chương trìnhđược khới động trong engine thì sẽ bắt đầu khởi tạo 1 đối tượng từClass này:

AppDelegate.h

Vìvậy khixây dựng game, ta cóthe tố chức chươngtrình theo ý muốn

cùa chúng ta nhưng bắt buộc phải bắt đầu từ Class này

Có3 hàm thành viên của lópnày phải viết lại (override):

virtual boo! applicationDidFinishLaunchingO;

Trang 18

virtual void applicationDidEnterBackground();

virtual void applicationWillEnterForeground();

bool AppDelegate:: applicationDidFinishLaunching( ) {

// initialize director

CCDirector* pDirector = CCDirector:: sharedDirector () ;

CCEGLView* pEGLView CCEGLView:: sharedOpenGLView( ) ;

pDirector->setOpenGLView(pEGLView);

// turn on display FPS

pDirectoi — >setDisplayStats (true);

// set FPS the default value is 1.0/60 if you don't call this

pDirectoi — >setAnimation!nterval(1.0 / 60);

// create a scene, it’s an autorelease object

CCScene *pScene = HelloWorld:: scene( ) ;

// run

pDirector->runwithscene(pScene) ;

return true;

Hinh 2.2 Code trong hàm applicationDidFinishLaunching

virtual boo! applicationDidFinishLaunchingO;

• Đây là hàm đầu tiên mà chương trình game sẽ chạy nếuđược khởi tạo

Nó được chạy khi chươngtrìnhhoàn tất việc load dữliệu

• Tại đâyta bắt đầu khởi tạo mànhình đầu tiên mà ta thiết kế Cụ the là 1 scenenào đó

• Từ hàm này ta có thế nhìn thấy 2 đối tượng quan trọng củaengine

game cocos2d-x đó làCCDirector vàCCScense Directorquán lý toàn

bộchươngtrình và Scene đạidiệncho một màn hìnhđang chạy

• Có thể nói hàm này được khởi chạy giống như hàm onCreateO trong

Activity được khai báo LAUNCHERtrong Android

virtual void applicationDidEnterBackground();

• Hàm này sẽ đượcgọikhi mà chương trình đang hoạt động mà bị hệ

Trang 19

điều hành tạm dừng lại(Pause)lại để dànhtàinguyên phục vụ cho mộttiến trình được ưu tiên hơn.

• Ví dụ một trườnghợp: Khita đang chơigame Có 1 cuộcgọiđến, hoặc đang chơi tabấm phím Hometrênđiệnthoại Các việcnày làm cho

chương trìnhđi vào cheđộ nền

• Ớ hàm này ta thường sẽ xử lý 1 số việc như: dừng tất càcácanimation,hiệuứng, âm thanh lại

virtual voidapplicationWillEnterForegroundO;

• Ngược lại với hàm applicationDidEnterBackgroundO, đây là hàm sẽ

được gọi khi mà chúng taactive lại chương trình Cónghĩa làkhitrước

chúngta dừng game lại đế nghe điệnthoại, saukhi kếtthúccuộc gọi,

hệ điều hành sẽ tiếp tục chạy cáctiếntrình liên quan đến game

• Khi hàm này được gọi, ta sẽ khôi phục các thông số của game như trước khiđi vàoche độ nềnđecó the tiếp tục game

2.2.3.2 CCDirector

CCDiector là phần quantrọng nhấtcùa engine game Lớp CCDirector là một lớpsingleton, nghĩa làchỉ có duynhấtmộtthể hiệncủa lớp nàyờmọithời điểm và nócó thố được truy xuất toàncục bằngcáchgọi:

CCDirector* pDirector = CCDirector: :sharedDirector() ;

Lớp CCDirector chứa các thiết lập toàn cục cho cocos2d-x và quản lý

các Scenestrong cocos2d-x Một số chức năng củalớp CCDircctor:

• Truy xuất vào Scene hiện tại trênmàn hình

• Khởi chạy một Scene, thaythế một Scene đang chạy bằng một Scene khác, pushing và poppingmột Scene từ stack (ngăn xếp) các Scene cùa chươngtrình game

Trang 20

• Truy xuất các thiết lập của cocos2d-x như kích thước cùa mànhình

đang chạy, lấy ra cácanimation đanghoạt động và nhiều các thiết lập

khác

• TruyxuấtvàoOpenGLView vàwindowtrongcocos2d-x

• Hỗ trợpause (tạm dừng), resume (khôiphục) và ending game

• Xác địnhcách mà trạng thái game được update (cập nhật)

Một số phươngthứchay dùngtronglớp CCDirector:

o pDirector->setOpenGL View(CCEGL View*);

o pDirector- >setDisplayStats (true);

Khới tạo mộtnode:CCNode *childNode = CCNode::create();

Thiết lập tag cho một node:childNode->setTag(123);

Trang 21

Lấymột nodebàng tag:parerìtNode->getChiỉdByTag(123);

Add nodevàonode cha: parentNode->addChiỉd(childNode);

Xóamột nodebằngtag, cleanup sẽ dừng toànbộ cácaction đang chạy

parentNode->removeChildByTag(1 23 ,true);

Xỏatất cácácnode từ node cha

parentNode->removeAUChildrenWithCleanup(true);

Lưu ý: Neumộtvài Nodecó giá trị tag giống nhau,hàm getChildByTag

sẽ trá vềnode đầu tiêncó đượcgánvới giá trị tag đó Các nodecòn lại sẽ không thế lấy về được Vìvậynên tạo mỗi nodecó giá trịmột tag duy nhất

Trang 22

Hình 2.3 Sơ đồ lớp CCNode

2.2.3.4 Hệ tọa độ và AnchorPointtrong cocos2d-x

Trong cocos2d-xthì mặc định mànhình mà ta nhìn thấy sẽ có gốc tọa độ nằm ở gócdưới cùng bên trái và có tung độ và hoành độ lầnlượtsẽlà kích

thước chiều cao, chiều rộngcủamànhìnhđiện thoạimà bạn sử dụng

AnchorPoint (điểmneo):

• Mọi nodeđều có 1 điếm neo, sẽ có 1 chút khác biệt nếunode đó là

Trang 23

mộttexture hay CCSprite hay CCLabelTTF Mặcđịnhđiểm neolà (0.5,0.5)tức là ở giữa texture.

• Sứ dụng anchorPoint không làm ánh hưởng đến tọa độ của mộtNode, chúng chi thay đôi cách mà texture được vẽ lên màn hình

hiến thị sovớitọa độcủanode đó

• Cáchdùng:myNode->setAnchorPoint( );

Hình 2.4.Hệ thống tọa độtrongcocos2d-x

Ví dụ với các dòng lệnhthiết lập điếm neo cho một Sprite như sau, ta sẽ

đượckếtquảnhưhình bên dưới (hình 2.4 theo thứ tự từ trái quaphải):

sprite->setAnchorPoint( CCPointZero );

sprite->setAnchorPoint( ccp(0.5f, 0.5f) );

sprite->setAnchorPoint( ccp(l,l) );

Trang 24

Sprite: anchor point

Hình 2.5 Ví dụvề thiết lập AnchorPoint trongcocos2d-x

CCSceneđại diện cho một mànhình ứng dụng chạytại một thờidiêm

Vàtrong cocos2d-x tại một thời điếmchỉcómột Scene được chạy Giống nhưtrong Android thì tại một thời điếm chi cómộtActivityđược chạy

Một đối tượng Scene luôn là đối tượng đau tiên trong sơ đồ Scene

Trong cocos2d-x, một Scene là một đổi tượng trừu tượng và lớp CCSccnechứa các hàm ảo(giống overridetrong Java)

Trong hình dướiđây,chúng ta sẽ thấy có ba Layer giúpchúng ta xử lýviệc vẽ cácSprite theo thứ tự bàng cách phân chia nhóm các đối tượngcó liên quan với nhau:layer background, layer các đối tượng trong game vàlayer các

phím điều khiến Sứdụng nhiều lớp trong một scene giúpchúngta nếu muốn

ânđitoàn bộ các nodetrong layer nào đó hoặc di chuyênlayer đó thinó sẽdi

Trang 25

chuyển toàn bộ các node trong layerđó, hoặc sắp xếp lại các layerđể các node đượcvẽở phía trước hoặc phía sau cácnode cùa một layer khác Thậmchíchúng ta có thê xoay hoặcthay đỏi tỉ lệ, kích thước cúamột layervànó

cũng sẽ ánh hưởng đến toàn bộcácnodebên tronglayer đó

Hình 2.6 Một Scenegame đơngiản

Game scene sứ dụng các layer cũnggiốngnhưtasứ dụng các chương

trình chình sửaảnh như Photoshop đểchinh hìnhánh Tuynhiên, cácNode

trongmỗi Layer không phải lúccũng tĩnh

Một đối tượng Scene thựcsự chỉ chứacác Layer, giống như các Layer

chi chứa cácđối tượng kế thừa từ CCNode Mồi Node cóthề xử lý logic,

Scene, Layer, các Noderiêng lé, Sprite, Label vàhơnthế nữa,hoàn toàn phụ thuộc vàocách chúng talập trình

Hệ thốngcây Node dưới đây gọilà sơ đồ Scenevànó có cấu trúcdạng

cây giống với composite design pattern:

Trang 26

Khới tạo một CCScene:CCScene *pScene = CCScene::create();

Khớichạy khi bắt đầu chương trình: pDìrector->runWìthScene(pScene);

Thay thế một Scene khác: pDirector->replaceScene(pScene);

Lay Sceneđang chạy hiệntại:pDirector->getRunningScene();

Công việcchính của Scene là tạo môi trường để chứacácCCNode khác

Vàhiến thị các Node đó lên giaodiệnthông qua hàm addChild(CCNode*).CCSene add được các đối tượng đồ họa như CCLayer, CCSprite,CCLabelTTF, CCMcnu

Nhưng Scenekhông thê addđược1 Scene khác

Một số lưu ý về scene và memory:

Đối với hàm pushScenevàpopScene củaDirector,chúngthay thế Scene

cũ bangScenemới mà khônggiải phóng Scene cũ ra khóibộ nhớ

Ưu điểm: chuyến sangScenemới sẽ nhanhhơn dokhôngphái khớitạo

lạivùng nhớ cho Scenemới và giãi phóngScenecũ nữa

Trang 27

• Nhược điếm: khi gặp các Scenephức tạp và chứa một lượng lớn RAMthìđiều nàydễ dần đến việcchương trìnhbị crash Ngoàira làchúng ta

phảinhớ có bao nhiêu scene chúng tađã push để khipop lại cho chính

xác

2.2.3.6 CCLayer

CCLayer là đối tượngquan trọng nhất cùa engine game cocos2d-x Mọi

thao tác người dùng đềucó thểthựchiệnở trên đối tượng này

Cũng gần giống như Scene, chúng ta không thể nhìn thấy CCLaycr

nhưng có thể nhậnbiếtsựtồn tại thông qua các đối tượngmà được CCLayerchứa nhưCCSprite,CCLabel

CCScene cũng có thếchứa được các đối tượng đồ họatrên nhưngnó chi

có thểchứađược Muốn thao tácđược với các đối tượng đó tacần phải sử dụng CCLayer

Vậy CCLayerlàmộtcontainer chứa cácđốitượng đồ họa cúa cocos2d-

X Layer giống nhưmộtinterface (giao diện) giúp người dùng có thề thao tác với game thông qua các sự kiện Touches vàomàn hình

Khới tạo 1 cclayer: CCLayer *pLayer = CCLayer::create();

Cácphương thức thường dùng của CCLayer

• setPosition(CCPoint)(Thiết lập vị trí cho layer)

• setAnchorPoint(CCPoint)(Thiết lập diem neocho layer)

• setTouchEnabled(bool) (Thiết lập trạng thái touchcho layer)

• setConteniSize(CCSize) (Thiết lập kíchthước cúa nội dung được

chứa tronglayer)

• setTag(int) (Thiết lập tag cho layer)

• addChild(CCNode) (Add một nodecon vào layer)

Trang 28

Sau khi khởi tạo CCLayerthi ta sẽ sửdụng với hai việc là:

Add các đối tượng đồ họađế hiện thị với người dùng thông qua hàmaddChild(CCNode*) CCLayer có thế add được các đối tượng đồ họa như

CCSprite, CCLabel,CCMenu Cũng như add được mộtCCLayer khác

Và muốn hiền thị được các đối tượng đồhọa thì taphải add CCLayer

vào 1 CCScene đang chạy hoặc chạy CCSene

Thông thường một CCSccnc sẽ add nhiều CCLaycr khác nhau, một

chương trình game có thế chicần mộtCCScene vàcónhiềuCCLayer Vì vậy

mồiLayer sẽ có một nhiệm vụriêng

Lớp CCLaycr được thiết kếđế nhận các sự kiện touch (chạm vào mànhình) nếu chúng tathiết lập các sự kiện đó.Đe bắtcácsự kiệntouchchúng ta

thiếtlập thuộc tính chophép chạm vào màn hình cho CCLayer thông qua hàmthành viên cùalớp CCLayer: setTouchEnable(true)

Có3 hàm sự kiện chính được sứ dụng là:

Bool ccTonchBegan(CCTouch *pTouch, CCEvent *pEvent)

Đế xửlý sự kiện ngrrời dùng bắt đầuchạmvàolayer

Void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)

Đe xứlý sự kiện người chơi di chuyến tay trên màn layer (drag-drop)

Void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)

Xử lýsự kiệnkhi người dùng kết thúc việc chạm vào màn hình

2.2.3.7 CCSprite

CCSpritc là một lớpđược sử dụng phố biến nhất trong việc lập trình

game Nó sứdụng một hình ánh đêvẽ sprite đó lênmànhình Cách đơn giản

nhất để tạo một sprite là từ một fileảnhđược load thành một CCTexture2D.Cocos2d-X CCSprite cũng giống như sprite cứa những game engines

Trang 29

khác Nó làmột hình ảnh2d có khả năng di chuyển, xoay, thay đổi kích thước, tạo hình ánh động vàthựchiện các phép biến đối khác.

CCSprite có the chứa các spritekhác như một thànhphầnconcủa nó

Khisprite cha đượcápdụngcác phươngthức biếnđổi thì tất cả những con của nó sẽ có tác động tương ứng

Spritecũngđượckế thừa từ CCNode nên nó có thế di chuyển bằng codehoặc dùnglớp CCActions

Các hàm thành viên hay dùng cúa lớp CCSprite

• create(const char* filename): tạo 1 sprite từ 1 file ánh (png, jpeg)

• setPosition(Ccpoint &point): thiết lập vị trí so với trongnode cha

• setScale(float fScale): thiết lập kíchthước chosprite

• setScaleX(float fScale): thiếtlập kích thước so với ánhgốc theo chiềungang với tỷ lệ íScale

• setScaìeY(float fScale):thiết lập kích thướcso vớiảnh gốc theochiều dọcvới tỷ lệfScale

• runActionfCCAction *action): chạy một hiệu ứng CCAction

Sau khi đã thiết lậpcác thông số cần thiết ta add sprite này vào mộtCCLayerhoặc một CCScene, hoặc 1Node có thể add đượcnó

Không chi CCSprite màtất cả cácđối tượng đồ họa từ cap Layer trở xuống đều có1 dữ liệu thành viên là ZOrder Dữliệunàycó ýnghĩa rấtquan trọng trong việctrình bàybố cụccùa game Dừ liệunàycóýnghĩa đối với

cácđối tượng là con (khôngphải cháu) của 1 đốitượngkhác Đối tượng nào

có zOrder cao hơnsẽ được hiến thị đè lên đối tượngcó ZOrder nhóhơn nếu

chúng cócùng vị trí

Trang 30

Cocos2d-Xhỗ trợ rất nhiều cácđổi tượng animation ví dụ như:

• CCMoveTo: Di chuyển đối tượng đến 1 vị trí nhất định

• CCMoveBy: Di chuyển đối tượngđến 1 vị trí so vớivịtríđốitượng đangđứng

• CCScaleTo: Thay đổi kíchthước đối tượng đến I kíchthước nhấtđịnh.Tất cảcác Animation này đều có 1 dừ liệuthành viên là Duration (kiểu

float) Đâylà thời gianxác định thời gianhoàn thành animation đó

Để thực hiện Animationcho1 Spriteta làmnhưsau (hình 2.9):

CCSprite *_sprite =CCSprite::create("HelioWorld.png”);

CCMoveBy* jnoveBy = CCMoveBy::create(0.5, ccp(100,100));

CCMoveTo * jnoveTo = CCMoveTo::create(0.5, ccp(100,100));

CCScaleTo * scaleĩo = CCScạlẹTo::create(0.5, ccp(lB0,100));

-Sprite ->runAction(_moveBy);

-Sprite ->runAction(_moveTo);

sprite ->runAction(scaleĩo);

Hình 2.9 Thực hiện animation cho sprite

Như vậy trong 0.5 s thi _spritcsẽ hoànthành đồng thời cá 3 animation

trên

Trang 31

Vậy làm thế nào đế đối sprite chạy lần lượt từng animation trên?

Ta sử dụng đối tượngCCScqucncc và đặttất cả các animation trên vào đối tượng CCSequence này Sauđó ta dùng lệnh sau đế chạy animation:

runAction();

CCSprite ‘-Sprite = CCSprite: :create("HelloWorld.png");

CCMoveBy* moveBy CCMoveBy:: create(0 5, ccp(100,100))i

CCMoveTo * — moveTo = CCMoveTo:: create (0.5j ccp(100,100));

CCScaleTo * _scaleTo = CCScaleTo:: create(0.5, 1.4);

—Sprite ->runActỉon(— moveBy) ;

-Sprite ->runAction(_moveTo) ;

-Sprite ->runAction(_scaleTo);

resequence* -Sequence = CCSequence: :create(_moveBy,—moveTo,_scaleTo,NUL)-); -Sprite- >runAction(_ sequence) ;| :

Hình 2.10 Thực hiện lần lượtanimationchomột sprite

Trong khi sửdụng các Animation, màta lại muốn xứlý 1 công việc nào

đó Công việcđó phái sau khi thực hiện xong animation mới thực hiện Nếuta

gọi hàm xử lýđó sau lệnh chạyanimation thì có khảnăng hàm xừ lý thựchiện trước khi animation thực hiện, vì có thể ta đặt duration cho animationquá lâu trongkhi tốcđộ xừ lý của máy tính thi lạiquá nhanh Vậy đế giải quyếtviệcđóta sử dụng các function call backmà cocos2d-x cungcấpsằn

Các function nàycũng được hiêu là 1 dạng animation, nênta có thê đặt

nó vào CCScquenceđế chạy lầnlượt như các animtion trên

Cácfunction-callback trong cocos2d-x:

• CCCallFunc - gọiđếnhàmkhông có kiêu trả về

• CCCallFuncO -gọiđến hàm cótham số là mộtObject

• CCCallFuncND-gọi đến hàm có 2tham số làNodevà Data (có thể để trốngtham số data vìnókhông có kiểu trả về)

• CCCallFuncN - gọiđếnhàm có tham số là một Node

Trang 32

Ví dụ vềsửdụngfunction callback tronganimation:

CCFiniteTimeAction *rotate=CCRotateBy::create(0,90);

CCFiniteTimeAction*downAction=CCMoveTo::create(l ,ccp(visibìeSize

width/4,48));

CCFiniteTimeAction*dowDone=CCCallFuncN::create(this,caựfuncN_s elector(CRobin:: RobinDeadDone));

this->nmAction(CCSequence::create(rotate,downAction,dowDone,NULL));

void CRobin::RobifìDeadDone(CCNode *sender) {

CCSprite *sprite=(CCSprite *)sender;

sprite->stopAHActions();

}

2.2.3.9 CCUserDefault

Mộtgame mobile thông thường không cần sửdụngnhiều đến việc lưu

trừdữ liệucùa game Tuy nhiên vầncần đếnviệc lưutrữdữliệu như lưu

điểm, level người chơi hoặc một thông sốtrong game nào đó Cocos2d-X

cung cấp đối tượng CCUserDcfaultđế làm công việc lưu trữtrong game

CCUserDefault làmột lớp Singleton, ta cóthetruy cập ờ mọi chỗ mà chỉ có một thể hiện của lớp được gọi thông qua hàm thành viên:

CCUserDefault::sharedUserDefault() Thôngqua thê hiện này tacó thê lưutrữ vàlấy dữliệutừ đối tương CCUserDefaultnày Cáchàm thường dùngcủaCCUscrDcíầult:

Trang 33

• sctIntcgcrForKey(const char *pKey, int value):Hàmnày cho phép lưu

trừ một sốnguyênvới một Key nhất định Neu muốnlấy được giá trị đã

lưu ta phải biết Key màtalưu trữ

• getlntegerForKey(const char* pKey): Đây là hàm lấy ra một giá trịsố nguyên mà tađã biết Key.Neu Keykhông đúng hàm này trả về một giá

trị bằng0

• Ngoài ra còn rất nhiều các hàm {get;set} cho các kiểu dữ liệu khác

nhau như String, Double Boolcũngđượcsứ dụng giống như kiểu dừ liệu sốnguyên ở trên

2.2.3.10 CCNotifictionCenter

Trong xửlý game, Công việc cần xử lýnhiềunhất chính làxử lý các sự

kiện được phátsinhtrong game Có hai loại sựkiệnchính:

Sự kiện tương tác ngườidùng: làsựkiệnngườidùng thaotácvớimàn hìnhnhư chạmvào màn hình, bấm vào một Button tronggame Khiđó lập trình viênsẽ bắt được các sự kiện đóđế xứ lý

Sự kiệntương tác giữa cácđối tượng trong game.Các sựkiện này xảyra

tronggame và cần người lập trình viênphảixửlý Không giống như sự kiệnButton Click, chúng ta không biết nên bắt sự kiện ờ chỗ nào cho hợp lý

Cocos2-X cung cấp đối tượngCCNotifictionCenterđế làm côngviệc gán sựkiện giốngnhư sự kiện tương tác người dùng

CCNotifictionCenter cũng là một lớp Singleton nên tạimọi thời điểmchi

có một thế hiện cúalóp Talàmviệc vớilópnày bằng hai hàm thành viên sau:

• addObserver(CCObject* target, SEL_CallfuncO selector, const char*

name, CCOjcct *obj)

• postNotification(const char*name, CCObject* object)

Trang 34

Các sửdụng nhưsau: Khita addObserver cónghĩa làtađãđãng ký một

sựkiện có tên “const char* name” vớimột hàm xứ lý là “SEL_CallfuncOselector” Vi vậy tại bất cứ nơi nào trong chương trình mà ta gọi hàmpostNotification với name giốngnhư name đã đăng kỷở hàm addObserver thì ngay lập tức sẽ được “selector” đã đăng kýsứ lý

2.2.3.10 Âmthanhtrongcocos2d-x

Cocos2d-X hỗ trợ các loại âm thanh như mp3, wav., và bộ thư viện

SimpỉeAudioEngine phụ trách côngviệc liên quan đến hiệu ứng âm thanh

SimpleAudioEngine cũng là mộtlớp Singleton Tại mọivị trí ta chi có một the hiện cúađối tượng này, và khai báonhư sau:

SimplcAudioEnginc *media= SimplcAudioEngine::sharcdEngine();

Các hàm thườngdùng cùaSimpleAudioEngine:

2.2.3.11 Các đối tượng Label

Cocos2d-Xcungcấpnhiều loại đối tượng Label để hiện thị các xâukýtự Tùyvàomục đích sử dụngkhácnhau mà tachọnđối tượng phù hợp

2.2.3.11.1 CCLabclTTF

CCLabelTTF là đối tượng Label được sứ dụngkhi tamuốn xâuký tựhiển thịcódạngfontchữgiốngnhưfontchừđãtruyền vàonhư trong hàm tạo

sau:

Trang 35

CCLabeiTTF* ỉhì = CCLabelTFF::create(“cocos", “Arial.ttf ”, 16).

Ớ câu lệnhtrên thì xâu đượchiển thị ra làsẽxâu“cocos” với fontchừ là

Arial với kích thước là 16 pixcel Vàcũng giống như các Node khácchúng ta cũng thiết lập các thuộc tính choCCLabelTTFrồiadd thêm vàomộtNode chacó thê chứa nó

Các hàm thườngdùng cùa CCLabelTFF

*.fnt để có thehiển thị cácký tự theo ý muốn của chúng ta

Ngày đăng: 18/03/2023, 07:30

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w