Đề tài framework for mobile game development
Framework for mobile game development TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG ® ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: FRAMEWORK FOR MOBILE GAME DEVELOPMENT Giáo viên hướng dẫn : Th.S Vũ Song Tùng Framework for mobile game development Hà Nội: -2014 BỘ GIÁO DỤC VÀ ĐÀO TẠO CỘNG HÒA XÃ HÔI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Độc lập - Tự - Hạnh phúc - NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: …………….………….…… Số hiệu sinh viên: …………………………………… Khoá:…………………….Khoa: Điện tử - Viễn thông Ngành: ……………… Đầu đề đồ án: ……………………………………………… ……………………………………………………………… ……………………………………………………………………………………………………………… Các số liệu liệu ban đầu: …………………………………… …………………………………………… …… …………………… ……………………………………………………………………………………………………………… ……………….… ……………………… ………………………………………………………………… Nội dung phần thuyết minh tính toán: ……………………………………………………………………………………………………………… … ……………………………………………………………………………………………………………… …………………… ….………………………………………………………………………………… …………………………………………………… ….…………………………………………………… Các vẽ, đồ thị ( ghi rõ loại kích thước vẽ ): ……………………………………………………………………………………………………………… ……… … ……………………………………………………………………………………………………………… ………… ……….…………………………………………………………………………… Họ tên giảng viên hướng dẫn: ……………………………………………………… ……………… Ngày giao nhiệm vụ đồ án: ………………………………………………….………………………………… Ngày hoàn thành đồ án: ……………………………………………………………………… …… Ngày Chủ nhiệm Bộ môn tháng năm Giảng viên hướng dẫn Framework for mobile game development Sinh viên hoàn thành nộp đồ án tốt nghiệp ngày tháng năm Cán phản biện Framework for mobile game development BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI - BẢN NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Số hiệu sinh viên: Ngành: Khoá: Giảng viên hướng dẫn: Cán phản biện: Nội dung thiết kế tốt nghiệp: Nhận xét cán phản biện: Framework for mobile game development Ngày tháng năm Cán phản biện ( Ký, ghi rõ họ tên ) Framework for mobile game development LỜI NÓI ĐẦU Với phát triển nhanh chóng điện thoại làm cho thị trường game điện thoại ngày đa dạng hấp dẫn hết Đặc biệt game android hệ điều hành android hệ điều hành mở cho phép nhà lập trình tùy ý sáng tạo đồng thời hệ điều hành chiếm thị phần lớn giới Chính nên đất nước nhiều khó khăn nước ta với kiến thức mở chia sẻ tự mạng hội cho nhà lập trình tự ta có quyền mơ giấc mơ giản dị tự sáng tạo đam mê mà kiếm tiền trang trải sống, chí giấc mơ xa game viết chỗ đứng thị trường nước khẳng định trình độ lập trình viên Việt Nam không thua lập trình viên nước Từ ông lớn Google có nhìn khác nhằm gỡ bỏ rào cản việc kiếm tiền việc bán game Google Store Tuy nhiên hội đôi với khó khăn thách thức, Việt Nam game giống đống hỗn độn, công ty lớn có tiền đua đồ họa, hình ảnh hay nhật vật hầm hố, sexy cách lố bịch Mặt khác nhà lập trình tự trình độ lập trình hạn chế engine tài liệu hay phức tạp nên tạo sản phẩm không ổn định, không mang tính hướng tới người dùng mà đơn giản viết xong vứt lên Google Store cầu cho tải xuống kích quảng cáo để có tiền hay tệ cướp tiền người dùng cách tự động nhắn tin đến số tổng đài Từ thấy có hai vấn đề thị trường game ta người có tiền không thèm đầu tư nội dung, kẻ nghiệp dư viết game để cầu may có tiền Vấn đề đơn giản công ty có tiền họ cần đầu tư nhân thiết kế hoàn toàn có nhiều hội kiếm nhiều lợi nhuận nhà lập trình tự chập chững vào nghề có hội cho họ nghĩ tương lai sáng Nguyễn Hà Đông làm với Flappy Bird – game có cốt truyện đơn giản đầy tính hấp dẫn độ khó cho dù đồ họa đơn giản Không cách khác người bước vào đường viết game coi Framework for mobile game development cần câu cơm phải học hỏi năm vững ngôn ngữ – thông thạo engine game Tuy nhiên hạn chế mặt tiếng anh đa phần lập trình viên việc nghiên cứu engine gặp không khó khăn chí đa phần engine game phức tạp phí làm cho thứ khó khăn Để giải vấn đề đồ án định viết engine game với thành phần giúp người lập trình nhanh chóng nắm bắt kiến trúc, quy trình việc làm game đồng thời nhanh chóng xây dựng game đơn giản đồ họa nhẹ nhàng với điện thoại Trong trình thực đồ án viết engine game nhận nhiều giúp đỡ từ thầy cô viện Điện Tử Viễn Thông, đặc biệt phải kể đến tận tâm nhiệt tình Th.S Vũ Song Tùng – người trực tiếp hướng dẫn hoàn thành đồ án Chúng xin gửi lời cảm ơn chân thành đến Thầy thầy cô Viện Điện Tử Viễn Thông Framework for mobile game development TÓM TẮT ĐỒ ÁN Với việc phát triển ngày nhanh thị trường game Việt Nam lập trình viên ngày có nhu cầu tiếp cận công cụ viết game cách nhanh chóng đơn giản Công cụ viết game đa phần engine game – tảng để nhà lập trình dựa vào để xây dựng game cho Tuy nhiên engine game chủ yếu phức tạp tài liệu mà viết chủ yếu tiếng anh Điều khiến cho lập trình viên Việt Nam gặp nhiều khó khăn việc tiếp cận công nghệ Chính đồ án chúng em nhằm mục đích viết engine game đầy đủ thành phần giúp lập trình viên tiếp cận với kiến trúc cách thức hoạt động engine game để từ nắm bắt tối ưu game viết Ngoài mặt kinh tế dựa engine game hoàn toàn tạo game có đồ họa đơn giản nội dung hấp dẫn để đưa lên Google Play Framework for mobile game development ABSTRACT Framework for mobile game development MỤC LỤC 10 Framework for mobile game development Phương thức onDrawFrame() hàm thực công việc Phương thức gọi nhiều luồng dựng hình Trong phương thức này, trạng thái Game kiểm tra để xử lý việc phù hợp Nếu Game chạy, “deltaTime” tính hàm Screen.update() Screen.present() hình gọi Nếu Game dừng, hình dừng, trạng thái Game chuyển sang GLGameState.Idle, đồng thời thông báo cho luồng UI biết thực dừng ứng dụng Thông báo cần thiết để đảm bảo luồng dựng hình dừng thực Activity bị dừng hay đóng luồng UI Khi activity bị đóng, trạng thai Game GLGameState.Finished, thông báo gửi tới luồng UI để tắt hoàn toàn ứng dụng Trong hàm onPause() Activity, phụ thuộc vào việc ứng dụng bị đóng hay tạm dừng, trạng thái thiết lập GLGameState.Finished hay GLGameState.Paused chờ đợi luồng dựng hình xử lý trạng thái Cuối gọi hàm dừng GLSurfaceView Activity Các phương thức getGraphics(), getAudio(), getInput(), getFileIO() trả thực thể tương ứng Phương thức setScreen() dừng xóa hình (cảnh) bắt đầu hình (cảnh) Phương thức getCurrentScreen() trả hình Game 2.6 Hoàn thiện Framework Sau hoàn thành phần 2.5,về framework hoàn thành Để Framework hoàn thiện hơn, phần 2.6 xây dựng thêm số phần : đối tượng Game, kiểm tra va chạm, tối ưu nhớ 79 Framework for mobile game development 2.6.1 Các loại đối tượng kiểm tra va chạm Game Hình 2.7 Các loại đối tượng kiểm tra va chạm Game Trong Game có hai kiểu đối tượng đối tượng động đối tượng tĩnh • Đối tượng tĩnh thể lớp GameObject Mỗi đối tượng tĩnh có vị trí hình chữ nhật bao quanh đối tượng để xử lý phát va chạm • Đối tượng động thể lớp DynamicGameObject, kế thừa cảu lớp GameObject Ngoài thuộc tính đối tượng tĩnh, đối tượng động có thêm thuộc tính vận tốc, gia tốc Để phát va chạm đối tượng, đối tượng có hình bao quanh : thường hình chữ nhật, hình tròn hay hình tam giác (ít dùng) Gói xây dựng hình bao quanh cho đối tượng phát va chạm gồm lớp : • Vector2.class : tạo điểm, hay vector • Triangle.class : tạo tam giác từ điểm 80 Framework for mobile game development • Rectangle.class : tạo hình chữ nhật với đầu vào bốn góc chiều dài chiều rộng • Circle.class : tạo hình tròn với điểm tâm bán kính • CheckCollision.class : phát va chạm hình bao quanh Các kĩ thuật phát va chạm hình khối : • Va chạm hình tròn với hình tròn : đơn giản, cần xét khoảng cách tâm nhỏ tổng bán kính hình Hình 2.8 Va chạm hình tròn [15] • Va chạm hình chữ nhật : kiểm tra cạnh trái hình nằm bên trái hình cạnh phải hình nằm phải cạnh trái hình cạnh hình nằm cạnh hình cạnh hình nằm cạnh hình Hình 2.9 Va chạm hai hình chữ nhật [15] 81 Framework for mobile game development • Va chạm hình chữ nhật hình tròn : tìm tọa độ (x,y) hình chữ nhật gần tọa độ tâm hình tròn Nếu tọa độ (x,y) tìm nằm hình tròn xảy va chạm Hình 2.10 Va chạm hình tròn hình chữ nhật [15] Kiểm tra điểm nằm hình tròn hay hình chữ nhật : cần xét khoảng cách tới tâm (trường hợp hình tròn) xét vị trí với cạnh (trường hợp hình chữ nhật) • Kiểm tra điểm nằm tam giác : sử dụng kĩ thuật Barycentric • Hình 2.11 Kiểm tra điểm nằm tam giác [15] Vector PA= u * BA + v * CA Tìm u,v sau: 82 Framework for mobile game development Vector2 v0 = r.C.sub(r.A); Vector2 v1 = r.B.sub(r.A); Vector2 v2 = p.sub(r.A); float dot00 = v0.dot(v0); float dot01 = v0.dot(v1); float dot02 = v0.dot(v2); float dot11 = v1.dot(v1); float dot12 = v1.dot(v2); float invDenom = / (dot00 * dot11 - dot01 * dot01); float u = (dot11 * dot02 - dot01 * dot12) * invDenom; float v = (dot00 * dot12 - dot01 * dot02) * invDenom; Kiểm tra điều kiện P nằm tam giác ABC return (u >= 0) && (v >= 0) && (u + v < 1); Va chạm tam giác: kiểm tra đỉnh tam giác nằm tam giác • Va chạm tam giác hình chữ nhật: kiểm tra đỉnh tam giác nằm • hình chữ nhật đỉnh hình chữ nhật nằm tam giác Va chạm tam giác hình tròn : kiểm tra đỉnh tam giác nằm hình tròn hình tròn va chạm cạnh tam giác (thuật toán dưới) • Va chạm hình tròn với cạnh tam giác : • Hình 2.12 Kiểm tra va chạm hình tròn cạnh tam giác [15] 83 Framework for mobile game development Tính đoạn k kiểm tra điều kiện va chạm p2 - k2 0.1f) deltaTime = 0.1f; Hàm cập nhật cập nhật đầu vào từ người dùng (như kiện chạm hình) xử lý chúng : List touchEvents = game.getInput().getTouchEvents(); 87 Framework for mobile game development game.getInput().getKeyEvents(); int len = touchEvents.size(); if (len>0) { } Hàm cập nhật trạng thái nhân vật kiểm tra va chạm chúng, ví dụ : nobita.update(deltaTime); checkCollision(); • Hàm vẽ lên hình present (float deltaTime): Hàm gọi hàm onDrawFrame() lớp GlGame mà Activity Game kế thừa Trong hàm lấy đối tượng GL10 thông qua thể glGraphics để kích hoạt Texture, đồng thời thiết lập Camera, sau phương thức vẽ vẽ nền, vẽ đối tượng,… ví dụ : GL10 gl = glGraphics.getGL(); gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glEnable(GL10.GL_TEXTURE_2D); guiCam.setViewportAndMatrices(); presentBackground(); presentObject(deltaTime); Hàm vẽ hay đối tượng sử dụng đối tượng “batcher” khai báo, ví dụ : batcher.beginBatch(Assets.background); 88 Framework for mobile game development batcher.drawSprite(FRUSTUM_WIDTH/2, FRUSTUM_HEIGHT/2, FRUSTUM_WIDTH, FRUSTUM_HEIGHT, Assets.backgroundRegion); batcher.endBatch(); Hình 3.1 Minh họa cảnh Game • Kiểm tra va chạm đối tượng : Việc kiểm tra va chạm thực hàm checkCollision() gọi hàm cập nhật cảnh Trong hàm kiểm tra va chạm hình bao quanh đối tượng, xử lý va chạm xảy Ví dụ : if (CheckCollision.overlapRectangles(nobita.bounds, castle.bounds)) { nobita.state=Nobita.NOBITA_STATE_STOP; } 89 Framework for mobile game development Hình 3.2 Va chạm đối tượng Game Chương III đồ án trình bày vài bước để sử dụng Framework xây dựng chương II Với hướng dẫn này, người dùng dễ dàng xây dựng Game 2D điện thoại với Framework 90 Framework for mobile game development KẾT LUẬN Với thời gian có hạn cho đồ án cố gắng xây dựng engine game để xây dựng game 2D dựa Về module yêu cầu bắt buộc xây dựng có bổ sung thêm số module bổ trợ Tuy nhiên thời gian ngắn để đáp ứng yêu cầu đồ án với nhiều module khác chưa thực tạo điểm bật mang tính bứt phá so với engine phát triển công ty hay nhóm lập trình khác đổi lại mục tiêu đặt xây dựng game cách mạch lạc rõ ràng dễ hiểu để lập trình viên hoàn toàn tiếp cận cách nhanh chóng viết game đơn giản cho riêng Về hướng phát triển tương lai chắn engine game phải xử lý đồ họa 3D đồng thời nâng cấp module cũ cách tạo nhiều tùy chọn hỗ trợ người dùng xây dựng hàm nạp chồng với nhiều đầu vào khác Cuối lần xin cảm ơn Trường Đại học Bách Khoa Hà Nội tạo điều kiện cho Thầy Vũ Song Tùng tận tâm giúp đỡ hoàn thành đồ án Xin chân thành cảm ơn! 91 Framework for mobile game development TÀI LIỆU THAM KHẢO [1] http://developer.android.com/, truy cập lần cuối 2/6/2014 [2] http://stackoverflow.com/, truy cập lần cuối 2/6/2014 [3] http://code.google.com, truy cập lần cuối 2/6/2014 [4] http://www.andengine.org/, truy cập lần cuối 2/6/2014 [5] http://libgdx.badlogicgames.com , truy cập lần cuối 2/6/2014 [6] http://github.com, truy cập lần cuối 2/6/2014 [7] http://androidgamestuto.blogspot.com/, truy cập lần cuối 2/6/2014 [8] http://www.kilobolt.com/, truy cập lần cuối 2/6/2014 [9] http://mobilegameengines.com/, truy cập lần cuối 2/6/2014 [10] http://android.vn/, truy cập lần cuối 2/6/2014 [11] Mario Zechner and Robert Green, Begginning Android Games Development, Apress, 2011 [12] http://vietgamedev.net/, truy cập lần cuối 2/6/2014 [13] J F DiMarzio, Practical Android Games Development, Apress, 2011 [14] http://www.androidhive.info/, truy cập lần cuối 2/6/2014 [15] Mario Zechner and Robert Green, Beginning Android Games, Apress, 2012 [16] http://www.youtube.com, truy cập lần cuối 2/6/2014 [17] http://www.gametutorial.net/, truy cập lần cuối 2/6/2014 [18] Vladimir Silva, Advanced Android Games, Apress, 2012 [19] Richard A Rogers, Learning Android Game Programming, Apess, 2012 92 Framework for mobile game development 93 [...]... tra va chạm giữa hình tròn và cạnh tam giác [15] Hình 2.13 Sơ đồ lớp tổng quan của Framework Hình 3.1 Texture (bên trái) và Texture Region (bên phải) Hình 3.1 Minh họa cảnh trong Game Hình 3.2 Va chạm của đối tượng trong Game 12 Framework for mobile game development DANH SÁCH CÁC TỪ VIẾT TẮT 13 Framework for mobile game development PHẦN MỞ ĐẦU Trong vài năm gần đây nhờ sự phát triển mạnh mẽ cùng dòng... gia tốc) 20 Framework for mobile game development o o Vào ra File (File I/O) : cho phép lấy các byte tài nguyên cho chương trình từ đĩa Đồ họa (Graphics) : đây là mô-đun phức tạp nhất,nó chịu trách nhiệm tải tài nguyên đồ họa và vẽ lên màn hình o Âm thanh (Audio) : chịu trách nhiệm tải và chơi các tài nguyên âm thanh Tập hợp các thành phần trên lại tạo thành một Game Framework, giúp cho viết game trở... 0.75 red = 0.5 * 0.5 + 0 * (1 – 0.5) = 0.25 (giá trị anpha được bỏ qua) 28 Framework for mobile game development o Các API đồ họa của Android cho phép người dùng xác định chính xác cách để trộn ảnh 1.2.6 Game Framework Việc cuối cùng sau khi hoàn thành các mô-đun là xác định những công việc được game framework thực hiện : Mỗi game gồm nhiều cảnh,mỗi cảnh thực hiện những việc như nhau : nhận đầu vào... file khi muốn lưu lại điểm cao hay thiết lập game hay trạng thái của game Các file sẽ được đọc từ file APK của game (trường hợp file được đóng gói theo game) hoặc đọc từ SD card ( các file được ghi vào SD card) 23 Framework for mobile game development 1.2.4 Âm thanh (Audio) Lập trình âm thanh khá phức tạp nhưng đối với âm thanh trong game ta không đi sâu vào xử lý âm thanh, chỉ bao gồm chơi và phát lại... bỏ Các định dạng âm thanh thường được sử dụng trong game là MP3 hay OGG, 24 Framework for mobile game development tuy là âm thanh đã được nén nhưng chất lượng chấp nhận được và giải quyết vấn đề dung lượng Âm thanh chia làm âm hiệu ứng (Sound effect) và nhạc (Music) : Nhạc: Thường có thời gian dài và chiếm nhiều bộ nhớ, vì vậy khi phát nhạc trong game, ta thường truyền trực tiếp các mẫu âm thanh từ... 2.2 Sơ đồ lớp mô-đun input Hình 2.3 Sơ đồ lớp mô-đun âm thanh Hình 2.4 Sơ đồ lớp mô-đun đồ họa Hình 2.5 Ảnh bitmap font Hình 2.6 Thực thì giao diện Game và lớp Screen Hình 2.7 Các loại đối tượng và kiểm tra va chạm trong Game 11 Framework for mobile game development Hình 2.8 Va chạm giữa 2 hình tròn [15] Hình 2.9 Va chạm giữa hai hình chữ nhật [15] Hình 2.10 Va chạm giữa hình tròn và hình chữ nhật [15]... dựng game Đó là mục đích về mặt công nghệ của đồ án ngoài ra về mặt kinh tế bạn hoàn toàn có thể dựa trên engine cơ bản của chúng tôi xây dựng những game có đồ họa không tồi chút nào Nếu bạn chịu khó đầu tư vào nội dung cốt truyện thì hoàn toàn bạn có thể chinh phục người chơi như Nguyễn Hà Đông đã làm được Trong phạm vi đồ án này chúng tôi sẽ trình bày làm 4 chương: 14 Framework for mobile game development. .. không khá mà các công nghệ về game hay các engine game khá phức tạp Mặt khác nếu làm game theo kiểu “ăn xổi” thì cũng khó theo kịp các nước phát triển game khác nên điều quan trọng là chúng ta phải nắm được những điểm cốt lỗi hay những nền tảng về engine game Nó là cái “xương sống” để xây dựng game, nắm bắt được nó chúng ta hoàn toàn có thể phát triển game lâu dài mà không thụt hậu về mặt công nghệ Tuy... vào hệ thống gửi sự kiện, do đó dễ dàng để ghi lại sự kiện Có hai cơ chế xử lý các thông tin sự kiện được ghi lại : 21 Framework for mobile game development o Polling (thăm dò) : chỉ kiểm tra trạng thái hiện tại của đầu vào, mọi trậng thái giữa lần kiểm tra hiện tại và lần kiểm tra cuối đều bị mất Cách xử lý đầu vào này chỉ thích hợp cho việc kiểm tra những thứ như xem người dùng chạm vào một nút cụ thể,... for mobile game development CHƯƠNG I CƠ SỞ LÝ THUYẾT 1.1 Kiến trúc nền tảng Android 1.1.1 Kiến trúc tổng quát Hình 1.1 Kiến trúc Android [1] 15 Framework for mobile game development Như trên hình Android gồm 4 thành phần Linux Kernel Libraries Application Framework Applications 1.1.2 Linux Kenel Hình 1.2 Nhân Linux trên Android [1] Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống