Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 112 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
112
Dung lượng
3,28 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƢU CHÍNH VIỄN THƠNG KHOA THIẾT KẾ VÀ SÁNG TẠO ĐA PHƢƠNG TIỆN ***** BÀI GIẢNG (Phƣơng pháp đào tạo theo tín chỉ) TÊN HỌC PHẦN: LẬP TRÌNH GAME CƠ BẢN IT (3 tín chỉ) Biên soạn PT Ths ĐỖ THỊ THU HƢỜNG LƢU HÀNH NỘI BỘ Hà Nội, 12/2014 Comment [k1]: Lưu ý phải đánh đề mục tự động MỤC LỤC MỤC LỤC DANH SÁCH HÌNH VẼ Chương TỔNG QUAN VỀ LẬP TRÌNH GAME 1.1 Tổng quan 1.1.1 Game 1.1.2 Quy trình thiết kế game 1.1.3 Quy trình sản xuất game 1.1.4 Nghề nghiệp ngành công nghiệp phát triển Game 10 1.1.5 Bộ công cụ phát triển game (SDKs) 12 1.2 Phân loại game 13 Hành động 13 1.2.2 Bắn súng 14 1.2.3 Phiêu lưu 14 1.2.4 Một số dạng game khác 14 1.3 IT 1.2.1 Lập trình ứng dụng lập trình game 15 Lập trình game - cơng việc khó 15 1.3.2 Công cụ phát triển game 15 1.4 PT 1.3.1 Những kỹ thuật cần thiết lập trình game 15 Kết luận chương I 16 Chương KIẾN TRÚC CỦA GAME 17 2.1 Kiến trúc game 17 2.2 Áp dụng kiến trúc game 17 2.3 Lớp ứng dụng 18 2.3.1 Đọc đầu vào (Reading Input) 18 2.3.2 Bộ đệm nguồn hệ thống file 19 2.3.3 Quản lý nhớ 19 2.3.4 Khởi tạo, vịng lặp Thoát 19 2.3.5 Một số mã nguồn lớp ứng dụng khác 20 2.1 Game Logic 20 2.4 Cấu trúc liệu trạng thái game 21 2.4.2 Vật lý va chạm 21 2.4.3 Sự kiện 21 2.4.4 Quản lý tiến trình 21 2.4.5 2.5 Thông dịch lệnh ( Command Interpreter) 21 Game view cho người chơi 22 2.5.1 Game view 22 2.5.2 Graphics Display 22 2.5.3 Audio 23 2.5.4 User Interface Presentation 23 2.5.5 Quản lý tiến trình 23 2.5.6 Options 23 2.5.7 Game nhiều người chơi 23 2.6 Khung nhìn Game cho AI Agents 23 2.7 Kiến trúc game mạng 24 2.7.1 Remote Game View 24 2.7.2 Remote Game Logic 25 IT Kết luận chương 25 Chương LẬP TRÌNH GAME 26 3.1 Tạo Project game 26 Tạo kiến trúc thư mục Project 26 3.1.2 Game Engine công cụ phần mềm làm game 26 3.1.3 Projects đa tảng 31 3.1.4 Building Game: Một công việc nghệ thuật 32 PT 3.1.1 3.2 Khởi tạo kết thúc game 35 3.3 Actor kiến trúc Component game 37 3.3.1 Xây dựng Actor game 37 3.3.2 Kiến trúc Component 42 3.3.3 Định nghĩa Actor Component 47 3.3.4 Lưu truy cập Actor 49 3.4 Điều khiển vịng lặp 49 3.4.1 Cập nhật cứng 50 3.4.2 Lặp đa nhiệm 51 3.4.3 Kỹ thuật lai 52 3.5 Tải lưu đệm liệu 58 3.5.1 Đối tượng 3D môi trường game 59 3.5.2 Dữ liệu ảnh động 60 3.5.3 Dữ liệu đồ, cấp 60 3.5.4 Dữ liệu Texture 60 3.5.5 Màu sắc 60 3.5.6 Dữ liệu âm thanh, nhạc, video 60 3.6 Quản lý tài nguyên 60 3.6.1 Nén tài nguyên hiệu 61 3.6.2 Bộ đệm tài nguyên 64 3.7 Lập trình xử lý nhập xuất vào 64 3.7.1 Trạng thái thiết bị 64 3.7.2 Sử dụng XInput DirectInput 68 3.7.3 Điều khiển theo hai trục tọa độ 68 3.7.4 Làm việc với điều khiển game 70 3.8 Lập trình giao diện 70 Khung nhìn game 70 3.8.2 Các Component hình 76 3.8.3 Các điều khiển 84 3.8.4 Trạng thái điểu khiển 86 3.9 IT 3.8.1 Quản lý kiện game 86 Sự kiện game 86 3.9.2 Phân biệt kiện tiến trình 87 PT 3.9.1 3.10 Xử lý âm 87 3.10.1 Âm game 87 3.10.2 Kiến trúc hệ thống âm game 88 3.11 Xử lý hình ảnh 100 3.11.1 Hình ảnh 100 3.11.2 Hình ảnh động – Animation 100 3.12 Xử lý va chạm 107 3.12.1 Bổ trợ kiến thức toán học 107 3.12.2 Lựa chọn SDK xử lý va chạm 109 3.12.3 Thuộc tính đối tượng game 109 3.12.4 Sử dụng hệ thống va chạm 111 Kết luận chương 111 Comment [k2]: Cần đánh Caption tự động cho hình vẽ để tạo bảng DANH SÁCH HÌNH VẼ PT IT Hình 1.1 Quy trình sản xuất game Hình 1.2 Vòng đời video game Hình 1.3 Biểu đồ mô giai đoạn phát triển game Hình 2.1 Kiến trúc game mức cao 17 Hình 2.2 Lớp ứng dụng 18 Hình 2.3 Game logic hệ thống 21 Hình 2.4 Giao diện game góc nhìn người chơi 22 Hình 2.5 Microsoft Flight Simulator X 22 Hình 2.6 Một khung nhìn AI agent 24 Hình 2.7 Kiến trúc game mạng Client-Server 24 Hình 3.1 Các game Engine phổ biến 27 Hình 3.2 Engine LibGdx AndEngine 28 Hình 3.3 Engine Cocos2D 28 Hình 3.4 Engine Corona 29 Hình 3.5 Engine Game Salad 29 Hình 3.6 Engine Gideros 29 Hình 3.7 Engine Unity 30 Hình 3.8 Các tảng mà Unity hỗ trợ 31 Hình 3.9 Thêm cấu hình tảng cho project game 32 Hình 3.10 Thư mục tảng V2 32 Hình 3.11 Visual Build từ phần mềm Kinook 33 Hình 3.12 Build game Unity 34 Hình 3.13 Lựa chọn tảng build game 34 Hình 3.14 Cây kế thừa Actor 38 Hình 3.15 Vịng tròn chết 39 Hình 3.16 Thêm đối tượng game 40 Hình 3.17 Thêm đối tượng game 41 Hình 3.18 Đối tượng game tạo 41 Hình 3.19 Các Component Actor 42 Hình 3.20 Thêm Component cho Actor game 42 Hình 3.21 Thêm Component cho Actor 43 Hình 3.22 Component Physic 2D 44 Hình 3.23 Một vịng lặp đơn giản 50 Hình 3.24 Một vịng lặp đa luồng 51 Hình 3.25 Một vịng lặp đa luồng hợp tác 52 Hình 3.26 Các luồng liệu từ file nguồn đến hệ thống game 58 Hình 3.27 Cấu trúc bên file ZIP 61 Hình 3.28 Input Unity 66 Hình 3.29 Các điều khiển Input 67 Hình 3.30 Horizontal Input 67 Hình 3.31 Quản lý hình game 77 Hình 3.32 Mơ hình Dialog Boxes 81 Hình 3.33 Bốn trạng thái điều khiển 86 PT IT Hình 3.34 Kéo thả file nhạc Unity engine 87 Hình 3.35 Phân cấp lớp hệ thống âm 88 Hình 3.36 Mỗi sprite keyframe 101 Hình 3.37 2D Spine 101 Hình 3.38 Thư mục chứa hình ảnh 102 Hình 3.39 Kéo thả hình ảnh vào hình game 102 Hình 3.40 Tạo animation 103 Hình 3.41 Tạo animation 103 Hình 3.42 Tạo animation 104 Hình 3.43 Thêm hình ảnh vào animation 105 Hình 3.44 Thêm hình ảnh vào animation 105 Hình 3.45 Thay đổi hình ảnh thơng qua vị Transform 106 Hình 3.46 Thay đổi hình ảnh thơng qua vị Transform 106 Hình 3.47 Thuộc tính vật lý đối tượng 109 Chƣơng TỔNG QUAN VỀ LẬP TRÌNH GAME 1.1.Tổng quan 1.1.1 Game Khái niệm game Thiết kế đa phương tiện: - Dựa lý thuyết chung lý thuyết game - Phục vụ cho nhu cầu thực tế người - Giới hạn game Thiết kế đa phương tiện dừng lại Thiết kế game điện tử Vậy, video game game mà hành động cần cơng nghệ thơng tin điều khiển Hiểu cách đơn giản game chơi thiết bị điện tử Lịch sử video game chia thành giai đoạn Lịch sử video game gắn liền với lịch sử phát triển của máy vi tính, thiết bị chơi game chuyên dụng phát triển thiết bị điện tử cầm tay Bên cạnh thiết bị đầu cuối, lịch sử video game gắn liền với lịch sử phát triển kỹ thuật trí tuệ nhân tạo (AI) IT 1958: Sự đời game Tennis of Two: phát triển William Higinbotham Đây chương trình mơ mơn thể thao tennis hình oscilloscope cho phép hai người chơi sử dụng thiết bị cầm box-shaped với viên bi để chỉnh hướng phím để đánh bóng 1971-1977: Giai đoạn cơng nghiệp mới: game máy tính cá nhân 1978 – 1986: Giai đoạn hoàng kim game máy tính cá nhân PT 1983 – 1995: Giai đoạn game Console hệ III (Máy Nintendo) Giai đoạn 1990: Đánh dấu đời game online 1988 – 1999: Giai đoạn Game console hệ IV Giai đoạn 2010: Sự đời Mobile Game Game cần người chơi, có luật chơi có điều kiện để chiến thắng game Đặc điểm video game đặc điểm chung game có thêm số điểm riêng: Có hình hiển thị game người chơi tương tác với game thơng qua hình hiển thị 1.1.2 Quy trình thiết kế game Ngành công nghiệp game: - Tăng trưởng cực nhanh: Theo Pricewaterhouse Coopers doanh thu ngành công nghiệp game đạt từ 31.6 tỉ $ đến 48.9 tỉ $ toàn giới năm 2011 - Tại Việt Nam doanh thu ngành game lớn: năm 2012, doanh thu từ game đạt 5000 tỉ đồng, mức tăng trưởng đạt khoảng 20% so với năm trước Thị trường game từ kinh doanh nhỏ lẻ cần có quy trình, quy chuẩn riêng để tồn phát triển Quy trình sản xuất game tuân theo quy trình sản xuất sản phẩm Đa phương tiện thơng thường: Hình 1.1 Quy trình sản xuất game PT IT Tuy nhiên, tính chất đặc trưng quy trình sản xuất game có đặc điểm riêng Trong phải kể đến tính chất vòng lặp sản phẩm Mỗi sản phẩm game có vịng đời kép kín lúc sản phẩm dừng cung cấp thị trường Hình 1.2 Vòng đời video game Xem xét kỹ quy trình sản xuất game ta chia thành nhiều bước hơn: Bắt đầu từ Nhu cầu khách hàng sản phẩm game, nhà thiết kế nhà cung cấp lên kế hoạch chi phí cho việc sản xuất game Nếu kế hoạch chi phí dự án thông qua, nhà thiết kế tiến tới bước thiết kế game Đây bước định trình sản xuất, nút thắt dẫn tới thành cơng hay thất bại game Tiếp bước sản xuất, bao gồm nhiều công đoạn lập trình, đồ họa, âm thanh, ghép nối, Khi sản phẩm thành hình, trước đưa thị trường, đội kiểm thử sản phẩm phối hợp với đội sản xuất với đội thiết kế để hoàn thiện sản phẩm Cuối cùng, sản phẩm đội kinh doanh đưa thị trường Tuy nhiên trình không kết thúc đây, nhu cầu khách hàng biến đổi tác động vào sản phẩm, nhà cung cấp cần tiếp thu nhu cầu khách hàng để hoàn thiện tiếp sản phẩm, kéo dài vòng đời sản phẩm tăng tối đa lợi nhuận thu Hình 1.3 Biểu đồ mô giai đoạn phát triển game 1.1.3 Quy trình sản xuất game a Giai đoạn tiền sản phẩm/ý tưởng IT Quy trình sản xuất game mô tả chi tiết sau qua bước: Ở giai đoạn này, thành viên phát triển ý tưởng, sau thống với đội để xác định ý tưởng chủ đạo sản phẩm • Qua giai đoạn này, ý tưởng cho lập trình, nội dung, thể loại game (action, puzzle, adventure, platform, sport, RPG ), phong cách đồ họa âm nhạc dần hình thành thể qua biểu đồ, đặc tả, thơng số thử nghiệm, hình vẽ tay nhân vật (sketch), giai điệu nhạc lựa chọn thống xuyên suốt giai đoạn phát triển b Thiết kế game PT • • Đây giai đoạn quan trọng trình thiết kế game Bạn bỏ nhiều thời gian cho giai đoạn lập trình, gỡ lỗi nhàn hạ Lập trình viên chuyên nghiệp hiểu lỗi xuất trình thiết kế thiệt hại nhiều so với lỗi phát giai đoạn • Bạn cần giấy, bút hay chương trình văn với vài người khác chơi thử game Khi “chơi thử” cách ghi giấy, ưu/khuyết thiết kế lộ rõ bạn chỉnh sửa cảm thấy vừa ý • Thiết kế đồ họa: Do độ phân giải hình điện thoại di động nhỏ nên vật thể đồ họa game thực đồ họa điểm ảnh (pixel art), người thiết kế đồ họa ngồi kiến thức vẽ tay, đổ bóng cịn phải có kỹ thao tác tỉ mỉ • Âm thanh:Người soạn nhạc phải có kiến thức nhạc lý, biết cách sử dụng nhạc cụ gõ trống nhạc cụ khác piano hay guitar, sử dụng chương trình soạn nhạc máy tính chun nghiệp Hiện có nhiều chương trình giúp cho việc soạn nhạc dễ dàng mà khơng cần biết nhiều nhạc lý, bạn cần lựa vài hợp âm, nhạc cụ, tempo, điệu nhạc , chương trình tạo nhạc cho bạn, nhiên chất lượng phong cách nhạc không thực bật c Code Với đặc tả có, dự tính thời lượng cho việc lập trình, tính tốn ngày cơng kỹ để ước tính khối lượng cơng việc dễ theo dõi tiến độ Lập trình game cơng việc lập trình có khác biệt lớn so với cơng việc lập trình khác Lập trình game mang lại cho người lập trình nhiều thử thách trải nghiệm thú vị Game game giải trí tuyệt vời mà gần tất người yêu thích Người lập trình game tiếp cận với cơng nghệ mới, đại từ hang công nghệ tiếng Nintendo, Microsoft, Sony, Apple, … Các công cụ phát triển phần mềm từ công ty lớn giới Unity, Havok, Epic, Valve,…cũng trợ thủ đắc lực thực thú vị cho nhà lập trình game Các cơng cụ giúp nhà lập trình game tiết kiệm nhiều thời gian, công sức mang lại game thực chất lượng thú vị IT Song song với thú vị mà nghề lập trình game mang lại số hạn chế thời hạn hồn thành game vơ khắt khe, vấn đề khó khăn việc quản lý dự án game, thay đổi chóng mặt cơng nghệ, hệ điều hành hệ thống phần cứng, cạnh tranh khốc liệt nhà phát triển game… Một số vấn đề tổng quan cơng việc lập trình game trình bày rõ phần d Kiểm tra, đóng gói Kiểm tra: Nhóm lập trình chơi thử, cảm nhận ghi lại tất ưu khuyết Sửa lỗi có Phát hành beta cho game thủ chơi thử lấy ý kiến họ • Đóng gói: game cho di động phải “xuất” hay đóng gói cho dịng máy khác (do dòng máy khác phím nhấn, nhớ thư viện hỗ trợ) PT • 1.1.4 Nghề nghiệp ngành cơng nghiệp phát triển Game Làm việc lĩnh vực phát triển game điều vơ tuyệt vời, game ngành khoa học Mặc dù có nhiều thử thách áp lực làm việc lĩnh vực game cơng việc thú vị Game kết hợp khoa học sang tạo bán cầu não trái bán cầu não phải Game đứa tinh thần nhà phát triển Để đứa tinh thần sinh ra, khỏe mạng trường tồn, thỏa mãn mong đợi người chơi đồng nghĩa với việc nhà phát triển phải bỏ công sức, thời gian lớn Nghề nghiệp lĩnh vực phát triển game chia thành nhiều nghề chuyên sâu như: thiết kế game, làm đồ họa cho game, lập trình game , kiểm thử game,… Mỗi cơng việc có thú vị riêng Trong số cơng việc này, thiết kế game cơng việc sang tạo nhất, bay bổng Game đến từ ý tưởng nào, chí từ ý tưởng điên rồ Ví dụ game Zoombies, nhân vật zoombies đến từ vũ trụ kết thí nghiệm khơng thành cơng nhà khoa học Đó hồn tồn công việc sang tạo không ngừng nghỉ nhà thiết kế game 10 Lớp DirectSoundAudio IT IAudioBuffer *audioBuffer = (*i); audioBuffer->VResume(); } m_AllPaused=false; } void Audio::VStopAllSounds() { IAudioBuffer *audioBuffer = NULL; AudioBufferList::iterator i; AudioBufferList::iterator end; for(i=m_AllSamples.begin(), end=m_AllSamples.end(); i!=end; ++i) { audioBuffer = (*i); audioBuffer->VStop(); } m_AllPaused=false; } PT class DirectSoundAudio : public Audio { public: DirectSoundAudio() { m_pDS = NULL; } virtual bool VActive() { return m_pDS != NULL; } virtual IAudioBuffer *VInitAudioBuffer( shared_ptr soundResource); virtual void VReleaseAudioBuffer(IAudioBuffer* audioBuffer); virtual void VShutdown(); virtual bool VInitialize(HWND hWnd); protected: IDirectSound8* m_pDS; HRESULT SetPrimaryBufferFormat( DWORD dwPrimaryChannels, DWORD dwPrimaryFreq, DWORD dwPrimaryBitRate ); }; Phương thức DirectSoundAudio::VInitialize(HWND hWnd) bool DirectSoundAudio::VInitialize(HWND hWnd { if ( m_Initialized ) return true; m_Initialized=false; 98 m_AllSamples.clear(); SAFE_RELEASE( m_pDS ); HRESULT hr; // Create IDirectSound using the primary sound device if( FAILED( hr = DirectSoundCreate8( NULL, &m_pDS, NULL ) ) ) return false; // Set DirectSound coop level if( FAILED( hr = m_pDS->SetCooperativeLevel( hWnd, DSSCL_PRIORITY) ) ) return false; if( FAILED( hr = SetPrimaryBufferFormat( 8, 44100, 16 ) ) ) return false; m_Initialized = true; return true; } PT IT Xử lý âm class SoundProcess : public Process { public: SoundProcess( shared_ptr soundResource, int typeOfSound=PROC_SOUNDFX, int volume=100, bool looping=false); virtual ~SoundProcess(); virtual void VOnUpdate(const int deltaMilliseconds); virtual void VOnInitialize(); virtual void VKill(); virtual void VTogglePause(); void Play(const int volume, const bool looping); void Stop(); void SetVolume(int volume); int GetVolume(); int GetLengthMilli(); bool IsSoundValid() { return m_SoundResource!=NULL; } bool IsPlaying(); bool IsLooping() { return m_AudioBuffer->VIsLooping(); float GetProgress(); protected: SoundProcess(); //Disable Default Construction void InitializeVolume(); void Replay() { m_bInitialUpdate = true; }; shared_ptr m_SoundResource; shared_ptr m_AudioBuffer; int m_Volume; 99 bool m_isLooping; }; 3.11 Xử lý hình ảnh 3.11.1 Hình ảnh Hình ảnh game Component vơ quan trọng Hình ảnh 2D 3D Một game thành công hay không phần lớn nhờ hình ảnh đồ họa chúng Việc tải hình ảnh đồ họa cài đặt chúng game tương đối phức tạp Tuy nhiên, với hỗ trợ game engine, việc quản lý xử lý hình ảnh đồ họa trở nên đơn giản nhiều Trong Unity game engine, hình ảnh đồ họa cần kéo thả vào project game Và hình ảnh thư mục project game kéo thả trực tiếp lên hình game Mọi việc trở nên dễ dàng nhiều 3.11.2 Hình ảnh động – Animation IT Hình ảnh động hình ảnh ghép từ nhiều ảnh khác Một hình ảnh động hình ảnh mơ tả đối tượng game Ví dụ: xe chạy, hay nhân vật Một animation Unity bao gồm nhiều hành động, hành động gọi clip PT Ví dụ: nhân vật có hành động đi, đứng, nhảy Có hai kỹ thuật để tạo animation (cả 2D 3D): kỹ thuật key frame kỹ thuật skeletal hay spine Cách xử lý hình ảnh động unity game engine a Kỹ thuật tạo animation * Kỹ thuật key frame Đối với kỹ thuật key frame, người ta sử dụng sprite cho key frame hành động 100 Hình 3.36 Mỗi sprite keyframe IT Để tạo chuyển động, ta vẽ key frame thời điểm đầu thay đổi key frame sau, có animation Đây phương pháp đơn giản để tạo chuyển động, lại tốn nhớ, ta phải tốn nhiều sprite cho nhiều chuyển động khác * Kỹ thuật skeletal hay spine hay xƣơng PT Đối với kỹ thuật này, người ta chia đối tượng thành nhiều sprite, sprite phận đối tượng (giống khúc xương xương) Để tạo key frame mới, ta thay đổi sprite vị trí, độ lớn, xoay sprite Component có liên quan đến chuyển động Sau kết hợp key frame lại với kỹ thuật key frame để tạo thành animation Các sprite cấu tạo nên key frame Hình 3.37 2D Spine 101 b Tạo animation Unity Hình 3.38 Thư mục chứa hình ảnh PT IT Bƣớc 1: Tạo Empty GameObject đặt tên MainCharacter (Parent Object) Bƣớc 2: Tạo đối tượng Empty GameObject nữa, đặt tên Animations, đối tượng MainCharacter (Đối tượng nên đặt vị trí 0,0,0) Bƣớc 3: Thêm Sprite Render cho đối tượng Animations vừa tạo Chọn sprite hiển thị mặc định cho Animation Kết sau Hình 3.39 Kéo thả hình ảnh vào hình game Bƣớc 4: Chọn đối tượng MainCharacter cửa sổ Hierarchy, chọn Menu -> Window -> Animation Một cửa sổ Animation editor sau: 102 Hình 3.40 Tạo animation PT IT * Hình chữ nhật đỏ nhỏ: nút play để xem trước animation * Hình chữ nhật đỏ lớn: danh sách clip thời aniamtion * Hình chữ nhật vàng: key frame Click vào danh sách clip chọn Create New Clip, ta đặt tên clip Running, save lại thư mục Animations Assets Bƣớc 5: Ở cửa sổ Animation Editor, chọn Add Curve, chọn Animations (Đối tƣợng đối tƣợng MainCharacter) chọn Sprite Render, chọn Sprite (Đối với clip bất kỳ, bước bắt buộc phải có) Hình 3.41 Tạo animation Kết sau, mặc định tạo tối thiếu Key Frame 103 IT Hình 3.42 Tạo animation PT Tiếp theo ta chọn key frame thứ 2, cửa sổ Inspector, Component Sprite Render, tiến hành đổi sprite khác (RunningVolt1 thay RunningVolt0) Chọn nút bao quanh trịn đỏ, chọn Sprite khác từ cửa sổ 104 IT PT Hình 3.43 Thêm hình ảnh vào animation Click đúp vào Key Frame (Thanh có vng màu vàng hình trước) để thêm key frame kéo thả key frame cho thời gian phù hợp để có chuyển động cần thiết Hình 3.44 Thêm hình ảnh vào animation 105 IT Ngồi thay đổi sprite thay đổi Transform (Translate, Scale, Rotation) cho sprite key frame, cách thêm Curve Transform cho đối tượng Animation hình Hình 3.45 Thay đổi hình ảnh thơng qua vị Transform PT Sau ta việc chọn key frame, đặt giá trị transform cho phù hợp theo ba trục x, y, z Hình 3.46 Thay đổi hình ảnh thơng qua vị Transform Chú ý: - Thay đổi transform sprite render đối tượng Animation không thay đổi transorm sprite render đối tượng cha MainCharacter - Đối với hành động nhảy không thay đổi vị trí key frame, làm thêm Component vật lý vào đối tượng cha, lúc nhân vật nhảy, hình ảnh nhảy lên vị trí để tính vật lý (theo đối tượng cha) nằm thấp hình ảnh - Một Clip bất kỳ, phải có tối thiểu key frame 106 3.12 Xử lý va chạm 3.12.1 Bổ trợ kiến thức toán học Một số đơn vị đo lường: - Meters Feet Cubits Kellicams Khoảng cách, vận tốc gia tốc (Distance, Velocity, and Acceleration) Mỗi khái niệm đặc trưng vector 3D Một số cơng thức tính p=p0 + vt PT IT Vec3 m_Pos; Vec3 m_Vel; Vec3 m_Accel; Vec3 CalcVel(const Vec3 &pos0, const Vec3 &pos1, const float time) { return (pos1 - pos0) / time; } Vec3 CalcAccel(const Vec3 &vel0, const Vec3 &vel1, const float time) { return (vel1 - vel0) / time; } inline Vec3 HandleAccel(Vec3 &pos, Vec3 &vel, const Vec3 &accel, float time) { vel += accel * time; pos += vel * time; return pos; } v=v0 + at p=p0 +v0t + (at )/2 Khối, gia tốc lực F Vec3 AddVectors(const Vec3 *f, int n) { Vec3 F = Vec3(0,0,0); for (int x = 0; x < n; x++) F += f[x]; return F; } Một đối tượng game định nghĩa thông số vật lý 107 class GameObject { Vec3 m_Pos; Vec3 m_Vel; Vec3 m_Accel; Vec3List m_Forces; Vec3List m_Impulses; float m_Mass; void AddForce(const Vec3 &force) { m_Forces.push_back(force); } void AddImpulse(const Vec3 &impulse) { m_Impulses.push_back(impulse); } void OnUpdate(const float time); }; IT Và thay đổi thuộc tính thực hàm cập nhật PT void GameObject::OnUpdate(const float time) { if (m_Mass == 0.0f) return; // Add constant forces Vec3 F(0,0,0); Vec3List::iterator it; for (it=m_Forces.begin(); it!=m_Forces.end(); it++) { F += *it; } // Also add all the impulses, and then clear the list for (it=m_Impulses.begin(); it!=m_Impulses.end(); it++) { F += *it; } m_Impulses.clear(); // calculate new acceleration m_Accel = F / m_Mass; m_Vel += m_Accel * time; m_Pos += m_Vel * time; } 108 3.12.2 Lựa chọn SDK xử lý va chạm Có nhiều SDK hỗ trợ cho việc xử lý tính chất vật lý đối tượng game va chạm, rơi, độ bât nảy,… Một số engine bật: Unity3D game engine, Unreal, Frostebite, libgdx, Cocos2dx, PT IT Trong Unity, thuộc tính vật lý thêm đơn giản sau: Hình 3.47 Thuộc tính vật lý đối tượng 3.12.3 Thuộc tính đối tƣợng game Mỗi đối tượng game có nhiều thuộc tính, số thuộc tính vật lý định nghĩa chất liệu – material, định nghĩa tệp tin XML 109 Game engine đọc thông số từ tập tin XML struct MaterialData { float m_restitution; float m_friction; MaterialData(float restitution, float friction) { m_restitution = restitution; m_friction = friction; IT } }; PT Một số thuộc tính khác mật độ bao phủ - density 0.0013 1.000 0.0100 0.0170 0.3500 0.5000 1.060 1.800 2.400 2.650 110 3.12.4 Sử dụng hệ thống va chạm Trong game khơng thể khơng nói đến kiên va chạm Các kiện va chạm quản lý hệ thống quản lý va chạm Trong Unity game engine, số hàm xây dựng để kiểm tra va chạm : - onTriggerEnter() onCollisionEnter() onExit() v v Kết luận chƣơng PT IT Chương ba đề cập tới tất khái niệm, Component cần có game đối tượng game, thuộc tính đối tượng game, hình game cách xây dựng, quản lý hình game Cách xử lý hình ảnh âm , trí tuệ nhân tạo , xử lý va chạm game nhiều người chơi Với kiến thức này, có nhìn tổng quan hiểu chất tương tác xử lý video game 111 Học liệu Học liệu bắt buộc [1] Game coding complete - Mike McShaffry David "Rez" Graham (Fouth edition, 2013) Học liệu tham khảo [1] Level up! The guide to great video game design - Scott Rogers (2010, John Wiley and Sons, Ltd) PT IT [2] The Art of game design A book of lenses - Jesse Schell (2008, Elsevier) 112 ... việc lập trình, tính tốn ngày cơng kỹ để ước tính khối lượng cơng việc dễ theo dõi tiến độ Lập trình game cơng việc lập trình có khác biệt lớn so với cơng việc lập trình khác Lập trình game mang... lập trình game có số đặc thù so với lập trình ứng dụng Tất cơng việc có mặt tốt, thuận lợi mặt khó khăn Lập trình game khơng ngoại lệ Lập trình game địi hỏi khắt khe thời gian Nó thể loại lập trình. .. loại lập trình ứng dụng Tuy nhiên, có nhiều người cho điều mang lại thú vị cho người lập trình game Lập trình game cơng việc khắt khe thời gian Nhà phát triển game nói chung lập trình viên game