Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 95 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
95
Dung lượng
2,64 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM VŨ ĐỨC TRUNG – 19520324 LƯƠNG MẠNH HÙNG - 19520098 KHÓA LUẬN TỐT NGHIỆP XÂY DỰNG 2D GAME ENGINE PHỤC VỤ CHO CƠNG TÁC GIẢNG DẠY LẬP TRÌNH GAME BUILD A 2D GAME ENGINE FOR TEACHING GAME PROGRAMMING KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM TP HỒ CHÍ MINH, 2023 ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM VŨ ĐỨC TRUNG – 19520324 LƯƠNG MẠNH HÙNG - 19520098 KHÓA LUẬN TỐT NGHIỆP XÂY DỰNG 2D GAME ENGINE PHỤC VỤ CHO CƠNG TÁC GIẢNG DẠY LẬP TRÌNH GAME BUILD A 2D GAME ENGINE FOR TEACHING GAME PROGRAMMING KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM GIẢNG VIÊN HƯỚNG DẪN ThS ĐINH NGUYỄN ANH DŨNG TP HỒ CHÍ MINH, 2023 THƠNG TIN HỘI ĐỒNG CHẤM KHÓA LUẬN TỐT NGHIỆP Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số …………………… ngày ………………… Hiệu trưởng Trường Đại học Công nghệ Thông tin - Chủ tịch - Thư ký - Ủy Viên - Ủy Viên LỜI CẢM ƠN Khóa luận tốt nghiệp hành trình đầy thử thách yêu cầu đầu tư đáng kể thời gian công sức Đây hội để chúng em áp dụng kiến thức kỹ học suốt năm học đại học, với việc tiếp thu thêm nhiều kiến thức trau dồi kinh nghiệm phục vụ cho phát triển chun mơn sau tốt nghiệp Khóa luận tốt nghiệp bước chuẩn bị cuối trước chúng em bước vào cánh cửa nghiệp cá nhân với ngành lập trình Vì vậy, khơng thử thách mà hội để rèn luyện hoàn thiện thân kỹ tích luỹ suốt q trình nghiên cứu thực khóa luận Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Thạc sĩ Đinh Nguyễn Anh Dũng, người đảm nhận vai trò giảng viên hướng dẫn cho khóa luận tốt nghiệp chúng em Sự tận tâm hỗ trợ thầy giúp nhóm vượt qua thách thức phát triển kỹ nghiên cứu lĩnh vực liên quan Những kiến thức dẫn từ thầy không mang lại hồn thiện cho khóa luận chúng em, mà làm tảng vững cho phát triển tương lai Chúng em muốn bày tỏ lòng biết ơn đến tất giảng viên khoa Công nghệ phần mềm, anh/chị bạn chia sẻ kiến thức quý báu hỗ trợ nhóm q trình nghiên cứu phát triển khóa luận Sự hướng dẫn góp ý đáng giá từ thầy cơ, anh/chị bạn đóng góp quan trọng vào hồn thiện khóa luận giúp chúng em mở rộng hiểu biết lĩnh vực chun mơn Ngồi ra, chúng em xin chân thành cảm ơn gia đình, bạn bè người thân yêu đồng hành hỗ trợ tinh thần suốt q trình thực khóa luận Sự ủng hộ động viên không ngừng người truyền động lực mạnh mẽ cho chúng em vượt qua khó khăn thách thức Cuối cùng, chúng em xin gửi lời cảm ơn sâu sắc đến tất thầy/cô, anh/chị bạn dành thời gian đọc đánh giá khóa luận Sự quan tâm phản hồi người giúp chúng em rút kinh nghiệm phát triển tương lai Một lần nữa, chúng em xin bày tỏ lòng biết ơn sâu sắc trân trọng đến tất người đồng hành ủng hộ nhóm hành trình MỤC LỤC TÓM TẮT KHÓA LUẬN .1 Chương MỞ ĐẦU 1.1 Lý chọn đề tài .2 1.2 Mục tiêu dự án 1.3 Đối tượng hướng đến .3 1.4 Phạm vi nghiên cứu Chương TỔNG QUAN 2.1 Giới thiệu sơ lược Game Engine 2.2 Các thành phần có Game Engine 2.3 Lợi ích việc sử dụng Game Engine giảng dạy lập trình game 2.4 Tổng quan Game Engine có thị trường 2.5 Các tính năng, ưu nhược điểm Game Engine đề cập 12 Chương NGHIÊN CỨU LÝ THUYẾT 14 3.1 Sơ lược khái niệm, nguyên tắc, phương pháp phát triển game 14 3.1.1 Khái niệm phát triển game 14 3.1.2 Nguyên tắc thiết kế game 14 3.1.3 Công nghệ phát triển game 15 3.1.4 Hình ảnh đồ họa 16 3.1.5 Âm hiệu ứng âm 16 3.2 Cách game hoạt động 16 3.2.1 Game Object 16 3.2.2 Component 17 3.2.3 Script 18 3.3 Sự cần thiết Game Engine phát triển game 19 3.4 Các khái niệm lĩnh vực phát triển Game Engine 20 3.4.1 Game Loop 20 3.4.2 Update Method 20 3.4.3 Render 21 3.4.4 Asset Management 21 3.4.5 Collision Detection 21 3.4.6 Physics Simulation 21 3.5 Các mơ hình thiết kế thường sử dụng để phát triển Game Engine 21 3.5.1 Component-based Design (CBD) 21 3.5.2 Entity-Component-System (ECS) 22 3.5.3 So sáng CBD với ECS 22 3.6 Các Design Pattern phổ biến dùng phát triển Game/Game Engine 23 3.6.1 Observer Pattern 23 3.6.2 Singleton Pattern 23 3.6.3 Dirty Flag Pattern 24 3.6.4 Object Pool Pattern 24 3.6.5 Type Object Pattern 24 3.6.6 Component Pattern 25 3.7 Cách thức dạy mơn Lập trình game phổ biến trường đại học Việt Nam 25 3.8 Lý luận tầm quan trọng ưu điểm việc phát triển Game Engine 26 3.8.1 Tầm quan trọng việc phát triển Game Engine 26 3.8.2 Ưu điểm việc phát triển Game Engine riêng 26 3.8.3 Các lý để phát triển Game Engine riêng 27 3.9 Giả thiết 27 3.9.1 Giả thiết tính khả thi hiệu việc phát triển Game Engine dựa kiến thức kinh nghiệm có sẵn 28 3.9.2 Giả thiết mức độ tiếp cận dễ dùng Game Engine người bắt đầu 28 3.9.3 Giả thiết việc ứng dụng sản phẩm vào việc giảng dạy lập trình game 28 Chương PHƯƠNG PHÁP NGHIÊN CỨU 30 4.1 Phương pháp nghiên cứu 30 4.2 Ngơn ngữ lập trình công nghệ sử dụng 30 4.2.1 Ngơn ngữ lập trình: Java 30 4.2.2 Cơng nghệ/Thư viện sử dụng q trình phát triển sản phẩm 30 4.3 Kiến trúc sử dụng 32 Chương PHÂN TÍCH THIẾT KẾ HỆ THỐNG 34 5.1 Sơ đồ danh sách Use-case 34 5.2 Đặc tả use-case 35 5.2.1 Use-case “Tạo Project” 35 5.2.2 Use-case “Mở Project” 36 5.2.3 Use-case “Tạo Game Object” 37 5.2.4 Use-case “Sửa Game Object” 38 5.2.5 Use-case “Xoá Game Object” 39 5.2.6 Use-case “Quản lý Animation” 39 5.2.7 Use-case “Quản lý Prefab” 40 5.2.8 Use-case “Quản lý Spritesheet” 41 5.2.9 Use-case “Quản lý Resource” 42 5.2.10 Use-case “Tạo/Chỉnh sửa game” 43 5.2.11 Use-case “Chạy game” 44 5.2.12 Use-case “Dừng game” 46 5.3 Sơ đồ Activity 47 Chương KẾT QUẢ, ĐÁNH GIÁ VÀ KẾT LUẬN 48 6.1 Danh sách tính sản phẩm 48 6.1.1 Giao diện người dùng đồ họa 48 6.1.2 Quản lý Game Object 48 6.1.3 Quản lý Component 49 6.1.4 Vật lý, va chạm 50 6.1.5 Animation 54 6.1.6 Quản lý project 55 6.1.7 Quản lý tài nguyên 56 6.1.8 Hỗ trợ âm 56 6.1.9 Kịch (Script) 56 6.1.10 Prefab 56 6.1.11 Spritesheet 56 6.1.12 Thiết kế giới game hình EditorScene 57 6.1.13 Chạy thử game hình GamePlayingScene 58 6.2 Sơ lược giao diện Engine 59 6.3 Danh sách hình giao diện 60 6.3.1 Màn hình EditorScene 61 6.3.2 Màn hình GamePlayingScene 62 6.3.3 Màn hình SpritesheetWindow 63 6.3.4 Màn hình AddSpritesheetWindow 64 6.3.5 Màn hình PrefabsWindow 66 6.3.6 Màn hình AssetsWindow 66 6.3.7 Màn hình ConsoleWindow 69 6.3.8 Màn hình HierarchyWindow 70 6.3.9 Màn hình InspectorsWindow 70 6.3.10 Màn hình OpenProjectWindow 73 6.3.11 Màn hình AddProjectWindow 75 6.3.12 Màn hình FileDialog 75 6.4 Đánh giá hiệu suất độ ổn định 76 6.5 Ưu nhược điểm đánh giá với Engine khác 77 6.5.1 Ưu điểm 77 6.5.2 Nhược điểm 78 6.5.3 Đánh giá so với Engine khác 78 6.6 Kết luận 79 Chương HƯỚNG PHÁT TRIỂN 80 Có thể dễ dàng kéo thả file từ folder khác thả vào cửa sổ Đối với file hình ảnh click vào di chuyển chuột vào EditorScene tạo Game Object mới, bên phải tên file hình ảnh có hình ảnh xem trước file đó, rê chuột vào hiển thị to Khi người dùng double-click vào file cửa sổ mở file với ứng dụng mặc định Ngoài ra, chuột phải vào file, người dùng sửa tên mở folder Exploer 67 Hình 6.19 Màn hình AssetsWindow 68 Hình 6.20 Màn hình tuỳ chọn AssetsWindow 6.3.7 Màn hình ConsoleWindow Đây hình ConsoleWindow, hiển thị Debug người dùng Để sử dụng nó, script dùng dịng code Debug.Log(“Thong tin can debug”); để thêm dòng Debug vào hình Ở góc bên trái có button “Clear” có tác dụng xóa hết dịng debug có sẵn Ở hình này, scrollbar ln cuộn xuống dưới, người dùng scroll lên hình giữ ngun vị trí scrollbar Hình 6.21 Màn hình ConsoleWindow 69 6.3.8 Màn hình HierarchyWindow Màn hình thể danh sách game object có EditorScene GamePlayingScene Để thuận tiện cho việc tìm kiếm game object nên hình chia làm nhiều tab, tab danh sách game object dựa tag Khi bấm vào button đây, thơng tin Game object hiển thị InspectorsWindow, đồng thời game object hiển thị EditorScene EditorScene hiển thị Hình 6.22 Màn hình HierarchyWindow 6.3.9 Màn hình InspectorsWindow Màn hình thể thông tin game object, đỉnh cửa sổ ta có thao tác làm việc với prefab Nếu người dùng click vào button “Go to…” 70 PrefabsWindow mở lên highlight prefab game object chọn Nếu người dùng click button “Override prefab” prefab game object thay đổi theo giá trị game object Cịn người dùng click button “Save as a new prefab” prefab tạo giá trị game object chọn thêm prefab vào danh sách prefab dự án Hai dịng để người dùng nhập thơng tin Tên Tag Game object Bên danh sách component game object Cuối button “Add component”, bấm vào button popup lên hiển thị danh sách component script Người dùng click để xác nhận muốn thêm component vào danh sách game object Hình 6.23 Màn hình mơ tả InspectorsWindow 71 Hình 6.24 Màn hình Add Component InspectorWindow Để xem thông tin component, bấm vào header chứa tên component để đóng mở hình xem thơng tin component 72 Hình 6.25 Màn hình mơ tả thơng tin Component InspectorWindow 6.3.10 Màn hình OpenProjectWindow Đây hình thể danh sách project, bấm vào button “Create new project” để mở hình AddProjectWindow 73 Double-click để mở project Hình 6.26 Màn hình OpenProjectWindow Hình 6.27 Màn hình tuỳ chọn OpenProjectWindow Ngồi ra, người dùng nhấn chuột phải để mở popup, sử dụng lựa chọn đổi tên, xóa project mở thư mục chứa project Explorer 74 6.3.11 Màn hình AddProjectWindow Người dùng nhập tên sau click button “Create” để tạo project Bấm “Cancel” để hủy Hình 6.28 Màn hình AddProjectWindow 6.3.12 Màn hình FileDialog Màn hình lên có u cầu việc referrence hình ảnh/sprite Màn hình có hai tab Spritesheets Sprite Ở tab Spritesheets, thiết kế giống với hình SpritesheetWindow, thể danh sách Spritesheet theo tab sprite phía Ở tab Sprite, thể tất hình ảnh assets Khi người dùng Double-click vào Sprite hình đóng, nơi yêu cầu referrence sprite nhận sprite mà u cầu Cịn người dùng click vào “Cancel” cửa sổ đóng 75 Hình 6.29 Màn hình FileDialog 6.4 Đánh giá hiệu suất độ ổn định Trong trình phát triển game engine, chúng em tiến hành loạt thử nghiệm để đánh giá hiệu suất độ ổn định engine Các thử nghiệm thực loạt máy tính với cấu hình khác nhau, bao gồm CPU, GPU, RAM hệ điều hành khác Dưới kết đánh giá chúng em: Về hiệu suất: Chúng em thử nghiệm game engine nhiều máy tính có cấu hình khác đạt hiệu suất ổn định khả hoạt động mượt mà tất máy tính Engine khơng tiêu thụ q nhiều tài nguyên CPU, GPU RAM 76 Điều đảm bảo game engine chạy tốt máy tính với nhiều cấu hình khác nhau, bao gồm máy tính có cấu hình thấp Về độ ổn định: Chúng em tiến hành thử nghiệm engine thời gian dài mà không gặp phải cố nghiêm trọng treo, đứng máy gây lỗi Độ ổn định engine yếu tố quan trọng, đảm bảo game không gặp vấn đề khơng mong muốn người dùng có trải nghiệm chơi game liền mạch Với kết thử nghiệm này, chúng em tự tin khẳng định game engine chúng em có hiệu suất tốt, tiêu thụ tài nguyên thấp đảm bảo độ ổn định trình sử dụng Điều đặc biệt hữu ích người bắt đầu học lập trình game, giúp họ dễ dàng tiếp cận phát triển game cách thuận lợi 6.5 Ưu nhược điểm đánh giá với Engine khác 6.5.1 Ưu điểm Giao diện thân thiện dễ sử dụng: Engine chúng em có giao diện trực quan, dễ sử dụng thân thiện với người dùng, giúp người bắt đầu lập trình game dễ dàng tiếp cận với việc phát triển game Tính đơn giản: Engine chúng em tập trung vào cung cấp tính để hỗ trợ việc học tập tìm hiểu lập trình game, đồng thời loại bỏ nhiều tính phức tạp khơng cần thiết xuất nhiều Game Engine khác Điều giúp giảm độ phức tạp tạo môi trường phát triển đơn giản thuận tiện Hiệu suất tốt: Engine chúng em tối ưu hóa tính để đạt hiệu suất tốt, đồng nghĩa với việc game chạy mượt mà không gây tải cho CPU, GPU RAM hệ thống Độ ổn định cao: Engine chúng em trải qua nhiều lần thử nghiệm kiểm tra để đảm bảo độ ổn định trình chạy game Điều giúp đảm bảo game không gặp lỗi không mong muốn người dùng có trải nghiệm chơi game liền mạch 77 6.5.2 Nhược điểm Không hỗ trợ build game: Engine chúng em tập trung vào mục đích học tập tìm hiểu, khơng hỗ trợ việc build game thành sản phẩm cuối để phát hành Không hỗ trợ phát triển game 3D: Engine chúng em tập trung hoàn toàn vào việc phát triển game 2D khơng cung cấp tính hay cơng cụ cần thiết để phát triển game 3D Chỉ phục vụ mục đích tìm hiểu, học tập: Engine chúng em thiết kế để cung cấp môi trường phát triển đơn giản thuận tiện để người dùng tìm hiểu học lập trình game Tuy nhiên, lại có hạn chế lớn sử dụng cho dự án game thực tế quy mô lớn 6.5.3 Đánh giá so với Engine khác Tóm lại, engine chúng em có nhiều ưu điểm giao diện thân thiện, tính đơn giản, hiệu suất tốt độ ổn định cao, so với số Game Engine khác có sẵn thị trường, chúng em cần thừa nhận engine chúng em có số hạn chế Hạn chế tính năng: So với Game Engine phổ biến khác, engine chúng em có hạn chế tính Các tính kéo thả, xem danh sách component GameObject giao diện, va chạm vật lý, animation, quản lý lưu trữ project, prefabs, spritesheet khơng cung cấp đầy đủ chi tiết triển khai cách linh hoạt Hỗ trợ hạn chế: Engine chúng em khơng cung cấp hỗ trợ đầy đủ dài hạn Do đó, việc tìm hiểu giải vấn đề phát sinh gặp khó khăn so với việc sử dụng Game Engine phát triển chuyên nghiệp cộng đồng hỗ trợ rộng rãi Thiếu tài liệu cộng đồng hỗ trợ: Do engine chúng em Game Engine phổ biến sử dụng rộng rãi, việc tìm kiếm tài liệu, hướng dẫn 78 hỗ trợ từ cộng đồng gặp khó khăn Điều thách thức người bắt đầu yêu cầu nỗ lực tự học tìm hiểu nhiều Tuy nhiên, nhược điểm khơng có nghĩa engine chúng em khơng có giá trị Với tính đơn giản dễ sử dụng, engine chúng em lựa chọn tốt cho người bắt đầu học lập trình game, muốn tìm hiểu phát triển game xây dựng sản phẩm game đơn giản 6.6 Kết luận Trong nghiên cứu này, chúng em đề xuất phát triển Game Engine đơn giản dựa kiến trúc Component-based Design (CBD) Engine chúng em có giao diện thân thiện, tính đơn giản, hiệu suất tốt độ ổn định cao Chúng em thử nghiệm đánh giá hiệu engine nhiều máy tính khác nhận thấy khơng tiêu thụ nhiều tài ngun đảm bảo ổn định Tuy nhiên, chúng em nhận thấy engine chúng em có số hạn chế không hỗ trợ build game, không hỗ trợ phát triển game 3D phục vụ mục đích tìm hiểu, học tập Những đóng góp nghiên cứu việc triển khai Game Engine đơn giản dễ sử dụng dựa kiến trúc CBD Điều giúp người dùng bắt đầu học lập trình game có cơng cụ hỗ trợ tốt để tìm hiểu nắm bắt phát triển game Đề xuất chúng em mở rộng tính hỗ trợ engine, bao gồm việc xây dựng hệ thống build game, hỗ trợ phát triển game 3D cung cấp tài liệu hướng dẫn đầy đủ cho người dùng Với kết đạt đề xuất này, chúng em hy vọng Game Engine chúng em giúp đỡ khuyến khích phát triển người bắt đầu lĩnh vực phát triển game 79 Chương HƯỚNG PHÁT TRIỂN Để phát triển Game Engine chúng em, chúng em đề xuất hướng sau đây: Mở rộng tính năng: Tiếp tục phát triển mở rộng tính Game Engine, bao gồm hỗ trợ build game, phát triển game 3D, hỗ trợ công nghệ ray tracing machine learning Tối ưu hóa hiệu suất: Tiếp tục nghiên cứu tối ưu hóa hiệu suất Engine để đảm bảo hoạt động mượt mà nhiều tảng thiết bị khác Hướng dẫn tài liệu: Xây dựng tài liệu hướng dẫn chi tiết đầy đủ để hỗ trợ người dùng bắt đầu với Game Engine, bao gồm ví dụ dự án thực tế để giúp họ hiểu áp dụng khái niệm công nghệ phát triển game Cộng đồng hỗ trợ: Tạo cộng đồng sôi động xung quanh Game Engine, cung cấp hỗ trợ kỹ thuật trao đổi kinh nghiệm thành viên cộng đồng Đồng thời, lắng nghe phản hồi từ người dùng cải thiện Engine dựa đóng góp gợi ý từ cộng đồng Tích hợp cơng cụ thư viện: Hợp tác tích hợp với cơng cụ thư viện phổ biến ngành phát triển game, giúp người dùng tận dụng tối đa cơng cụ tài ngun có sẵn để phát triển game Liên tục nâng cấp bảo trì: Đảm bảo Game Engine cập nhật bảo trì thường xuyên để đáp ứng yêu cầu thay đổi lĩnh vực phát triển game Với hướng phát triển này, chúng em hy vọng Game Engine chúng em ngày trở nên mạnh mẽ hữu ích cho cộng đồng phát triển game, đồng thời đóng góp vào phát triển tiến lĩnh vực 80 TÀI LIỆU THAM KHẢO [1] Schell, J The art of game design: A book of lenses CRC Press, 2008 [2] Nystrom, R Game programming patterns Genever Benning, 2014 [3] LWJGL Guide Retrieved from https://www.lwjgl.org/guide [4] Box2D Documentation Retrieved from https://box2d.org/documentation/ [5] Dear ImGui GitHub Repository Retrieved from https://github.com/ocornut/imgui [6] JBox2D GitHub Repository Retrieved from https://github.com/jbox2d/jbox2d [7] stb GitHub Repository Retrieved from https://github.com/nothings/stb [8] The Cherno (YouTube Channel) OpenGL Series Retrieved from https://www.youtube.com/playlist?list=PLlrATfBNZ98foTJPJ_Ev03o2oq3-GGOS2 [9] JOML-CI GitHub Repository Retrieved from https://github.com/JOMLCI/JOML [10] Patricio Gonzalez Vivo, Jen Lowe The book of Shader Patricio Gonzalez Vivo, 2015 [11] LearnOpenGL Retrieved from https://learnopengl.com/ 81