tìm hiểu corona sdk và lua, ứng dụng phát triển game trên thiết bị di động

91 647 3
tìm hiểu corona sdk và lua, ứng dụng phát triển game trên thiết bị di động

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGÀNH KỸ THUẬT PHẦN MỀM Đề tài TÌM HIỂU CORONA SDK VÀ LUA, ỨNG DỤNG PHÁT TRIỂN GAME TRÊN THIẾT BỊ DI ĐỘNG Sinh viên: Hồ Hữu Nhân Mã số: 1111321 Khóa: K37 Cần Thơ, 05/2015 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG BỘ MÔN CÔNG NGHỆ PHẦN MỀM LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC NGÀNH KỸ THUẬT PHẦN MỀM Đề tài TÌM HIỂU CORONA SDK VÀ LUA, ỨNG DỤNG PHÁT TRIỂN GAME TRÊN THIẾT BỊ DI ĐỘNG Người hướng dẫn Sinh viên thực ThS Phan Phương Lan Hồ Hữu Nhân Mã số: 1111321 Khóa: K37 Cần Thơ, 05/2015 Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT LỜI CẢM ƠN Trước hết, xin gởi lời cảm ơn chân thành tri ân sâu sắc đến thầy cô trường Đại học Cần Thơ Đặc biệt thầy cô khoa Công Nghệ Thông Tin Truyền Thông tạo điệu kiện cho học tập hồn thành khóa học, luận văn tốt nghiệp Đồng thời xin chân thành cảm ơn Phan Phương Lan nhiệt tình hướng dẫn tơi hồn thành luận văn tốt nghiệp suốt thời gian qua Bên cạnh đó, tơi cảm ơn tất người thân, bạn bè tạo điều kiện động viên tơi hồn thành tốt luận văn Đặc biệt, muốn gửi lời cảm chân chân thành đến anh Nguyễn Thanh Hồi, cảm ơn anh nhiệt tình giúp đỡ, giải đáp thắc mắc cho suốt trình làm luận văn Trong trình học tập, trình làm luận văn, cố gắng khó tránh khỏi sai sót, mong nhận ý kiến đóng góp q báu q Thầy Cơ bạn Tôi xin chân thành cảm ơn! Cần thơ, ngày tháng năm 2014 Sinh viên Hồ Hữu Nhân Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT MỤC LỤC Lời cảm ơn Mục lục Danh mục bảng Danh mục hình Tóm tắt Abstract 10 Giới thiệu 11  Đặt vấn đề 11  Tóm tắt lịch sử giải vấn đề 11  Mục tiêu đề tài 12  Đối tượng phạm vi nghiên cứu 12  Nội dung nghiên cứu 12  Những đóng góp đề tài 13  Bố cục luận văn 13 Chương - Mơ tả tốn 14 1.1 Mơ tả chi tiết tốn 14 1.2 Phân tích đánh giá giải pháp/ có liên quan đến toán 15 1.3 Tiếp cận giải vấn đề 16 Chương - Thiết kế cài đặt giải pháp 30 2.1 Thiết kế 30 2.1.1 Thiết kế kiến trúc 30 2.1.2 Thiết kế liệu 31 2.1.3 Thiết kế giao diện 37 2.1.4 Thiết kế thuật toán 51 Chương - Kiểm thử đánh giá 58 3.1 Mục tiêu kiểm thử 58 3.2 Kịch kiểm thử 58 3.3 Kết kiểm thử 59 Kết luận 61 Kết đạt 61 Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT Hạn chế 61 Hướng phát triển 61 Tài liệu tham khảo 62 Phụ lục 63 Hướng dẫn cài đặt 63 1.1 Cài đặt Java Development Kit 63 1.2 Cài đặt Corona SDK 63 1.3 Cài đặt Corona Cards 63 Hướng dẫn phát triển 65 2.1 Tạo project từ Corona SDK 65 2.2 Cách build project (xuất file apk) 66 2.3 Cách tạo bodyType sử dụng công cụ Physics Editor 67 Sơ lược ngôn ngữ Lua 73 3.1 Giới thiệu 73 3.2 Cú pháp 74 Sơ lược Corona SDK 78 4.1 Các đối tượng hiển thị 78 4.2 Sự kiện đối tượng hiển thị (multitouch, tap, touch) 80 4.3 Sự kiện vật lý cho đối tượng (physics) 82 4.4 Chuyển trang 83 4.5 Đối tượng lớp widget 85 4.6 Đối tượng lớp native 86 4.7 Thao tác với File 86 4.8 Thao tác với database 89 4.9 Transition, Timer 90 Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT DANH MỤC BẢNG Bảng 1: Bảng diễn giải đối tượng game 17 Bảng 1.2: Danh sách sơ đồ 18 Bảng 2.1: Danh sách đối tượng game 31 Bảng 2.2: Bảng diễn giải liệu dùng game 36 Bảng 2.3: Bảng sanh sách tên thuật toán 51 Bảng 3.1: Kết kiểm thử theo chức 59 Bảng 3.2: Kết lần chơi xác định số điểm – 59 Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT DANH MỤC HÌNH Hình 1.1: Sơ đồ lớp 16 Hình 1.2: Sơ đồ chơi thứ 19 Hình 1.3: Sơ đồ chơi thứ 20 Hình 1.4: Sơ đồ chơi thứ 20 Hình 1.5: Sơ đồ chơi thứ 21 Hình 1.6: Sơ đồ chơi thứ 21 Hình 1.7: Sơ đồ chơi thứ 22 Hình 1.8: Sơ đồ chơi thứ 23 Hình 1.9: Sơ đồ chơi thứ 24 Hình 1.10: Sơ đồ chơi thứ 24 Hình 1.11: Sơ đồ chơi thứ 10 25 Hình 1.12: Sơ đồ chơi thứ 11 25 Hình 1.13: Sơ đồ chơi thứ 12 26 Hình 1.14: Sơ đồ chơi thứ 13 27 Hình 1.15: Sơ đồ chơi thứ 14 28 Hình 1.16: Sơ đồ chơi thứ 15 29 Hình 2.1: Hệ thống phân cấp project 30 Hình 2.2: Sơ đồ phân cấp chức phần mềm 31 Hình 2.3: Sơ đồ phân cấp liệu dùng game 36 Hình 2.4: Loạt hình ảnh hình thành nên nhện 37 Hình 2.5: Sử dụng chức Place Insert Frame Corel 37 Hình 2.6: Chú nhện có màu bóng trắng 38 Hình 2.7: Mảng ảnh động nhện 38 Hình 2.8: Loạt hình ảnh hình thành nên lị xo 38 Hình 2.9: Lị xo có thêm đỡ 38 Hình 2.10: Mảng ảnh động lò xo 39 Hình 2.11: Loạt hình ảnh hình thành nên vật nặng 39 Hình 2.12: Mảng ảnh động vật nặng 40 Hình 2.13: Giao diện loading 41 Hình 2.14: Giao diện menu 41 Hình 2.15: Giao diện menu (có nút bật/tắt âm thanh) 42 Hình 2.16: Giao diện hướng dẫn 42 Hình 2.17: Giao diện hướng dẫn 43 Hình 2.18: Giao diện chọn chơi 43 Hình 2.19: Giao diện 44 Hình 2.20: Giao diện 44 Hình 2.21: Giao diện 45 Hình 2.22: Giao diện 45 Hình 2.23: Giao diện 46 Hình 2.24: Giao diện 46 Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT Hình 2.25: Giao diện 47 Hình 2.26: Giao diện 47 Hình 2.27: Giao diện 48 Hình 2.28: Giao diện 10 48 Hình 2.29: Giao diện 11 49 Hình 2.30: Giao diện 12 49 Hình 2.31: Giao diện 13 50 Hình 2.32: Giao diện 14 50 Hình 2.33: Giao diện 15 51 Hình 2.34: Thuật toán kiểm tra chiến thắng cho chơi 52 Hình 2.35: Thuật tốn nhện chụp lấy bóng màu, ném đối tượng khác 53 Hình 2.36: Thuật tốn tạo nét cắt 54 Hình 2.37: Thuật toán tạo sợi dây treo vật thể 55 Hình 2.38: Thuật toán tạo đối tượng – cách xách định va chạm 56 Hình 2.39: Thuật tốn tính lực va chạm 57 Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT TĨM TẮT Sự bùng nổ thiết bị thông minh vài năm qua dẫn đến đời thị trường tiềm - thị trường ứng dụng di động Thị trường có tốc độ phát triển nhanh chóng mạnh mẽ, đặc biệt lĩnh vực lập trình game di động, vùng đất hứa cho lập trình viên đam mê game di động Luận văn tốt nghiệp cơng trình nghiên cứu game engine – công cụ cung cấp môi trường phát triển tích hợp đơn giản hóa, đặc biệt công cụ Corona SDK, tảng phần mềm linh hoạt dễ dàng sử dụng lại với chức cốt lõi cần thiết Sản phẩm luận văn game (Spider Ball) chạy thiết bị di động, máy tính bảng chạy hệ điều hành Android Game phát triển ngơn ngữ Lua cơng cụ phát triển trị chơi Corona SDK, theo cách lập trình hướng liệu game tạo 15 chơi xếp từ mức độ dễ đến khó, giao diện thân thiện, đối tượng đồ họa sinh động, âm trực quan lôi người chơi Tuy game chạy tảng Android, tương lai game tiếp tục phát triển có mặt tảng thông dụng (Android, iOS Window phone) Chuyên ngành Kỹ Thuật Phần Mềm Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT ABSTRACT The explosion of smart devices in the past few years led to the birth of a potential market - the mobile application market Market is able to grow strong and fast, especially in the moblie game programming, the promised land which gives software developer enthuse for games on mobile Thesis researchs for the game engine - tools are generally provided in an integrated development environment to enable simplified, especially Corona SDK tools, they provide a flexible and reusable software platform which provides all the core functionality needed Product of the thesis (Spider Ball) runing on mobile devices, tablets running the Android operating system The game has developed on Lua language and Corona SDK, follow programming in a data-driven manner, game have 15 levels from easy to difficult, user-friendly interface, vivid graphic objects, visual audio appeal players However, the game only runs on the Android platform, but the game will continue to develop in the future and be present on all platforms currently used (Android, iOS and Windows Phone) Chuyên ngành Kỹ Thuật Phần Mềm 10 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + repeat: câu lệnh while kiểm tra điều kiện trước lặp repeat thực câu lệnh trước kiểm tra điều kiện repeat until  Module: có nhiều cách để khai báo module Lua Ở giới thiệu cách thường dùng – Từ table sử dụng tương tự lớp ngơn ngữ hướng đối tượng Ví dụ: mymodule.lua module(… , package.seeall ) local M = {} pulish interface private local x = local function test() print ‘test’ end function M.func1() print( “func1”, x ) end function M.func2() print( “func2”, x ) end function M.func3() print( “func3”, x ) end return M main.lua sử dụng local obj = require(“mymodule”) obj.test()  test obj.func1()  func1 obj func2()  func2 obj func3()  func3 – Sử dụng module để khai báo function cần thiết Ví dụ: mymodule.lua Module(…, package.seeall) optionally omitting package.seeall if desired private local x = local function test() print ‘test’ end function func1() print( “func1”, x ) end function func2() Chuyên ngành Kỹ Thuật Phần Mềm 77 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT print( “func2”, x ) end main.lua Sử dụng Local obj = require(“mymodule”) Obj.test()  test Obj.func1()  func1 Obj.func2()  func2 SƠ LƯỢC VỀ CORONA SDK 4.1 Các đối tượng hiển thị  Bất thứ xuất hình thể Display Object như: hình chữ nhật, hình vng, hình trịn, hình ảnh, văn bản, …  Một số thuộc tính chung đối tượng hiển thị (Obj) – Obj.alpha: độ suốt đối tượng giá trị từ đến 1, mặc định – Obj.x: tọa độ x – Obj.y: tọa độ y – Obj.isVisible: nhìn thấy hay khơng thấy đối tượng, mặc định true – Obj.rotation: góc quay đối tượng (đơn vị độ) – Obj.contentHeight: chiều cao tọa độ hình – Obj.contentWidth: chiều rộng tọa độ hình – Obj.xScale: giá trị tỉ lệ theo chiều rộng đối tượng – Obj.yScale: giá trị tỉ lệ theo chiều dài đối tượng  Đối tượng Image – display.newImage( path_image[, left , top][, isFullResolution] ) + path_image: đường dẫn file hình + left: cách trái + top: cách + isFullResolution: tự co giãn theo độ phân giải máy hay không – display.newImageRect( path_image , w , h ) + path_image: đường dẫn file hình + w: độ dài chiều rộng + h: độ dài chiều cao  Đối tượng Shape – display.newRect( left , top , width , height ) Chuyên ngành Kỹ Thuật Phần Mềm 78 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + + + + left: cách trái top: cách width: độ dài chiều rộng height độ dài chiều cao – display.newRoundedRect( left, top, width, height, cornerRadius) + left: cách trái + top: cách + width: độ dài chiều rộng + height độ dài chiều cao + cornerRadius: bán kính bo trịn góc – display.newCircle( xCenter, yCenter , radius ) + xCenter: x tọa độ tâm + yCenter: y tọa độ tâm + radius: bán kính  Đường thẳng đa giác – display.newLine( [parentGroup] , x1 , y1 , x2 , y2 ) + ParentGroup: Một nhóm hiển thị tùy chọn, để chèn đường thẳng + x1, y1: tọa độ x tọa độ y điểm bắt đầu + x2, y2: tọa độ x tọa độ y điểm kết thúc – display.newPolygon( parent , x , y, vertices ) + Parent: Một nhóm hiển thị tùy chọn để chèn hình đa giác + x,y: tọa độ đa giác + Vertices: Một mảng tọa độ x y Các tọa độ tự động tái trung trung tâm đa giác  Text – display.newText( string , x , y , font , size ) + string: chuỗi hiển thị + x,y: tọa độ x, tọa độ y + font: tên font + size: kích thước – Thuộc tính thường dùng + Tơ màu text: Obj:setTextColor(r,g,b) + Thay đổi text: Obj.text = “text”  Group – Dùng để nhóm đối tượng lại thành nhóm – Khai báo: local g = display.newGroup() – Thuộc tính: + g.insert( index , obj1 ) Thêm đối tượng obj1 vào group g vị trí index Chuyên ngành Kỹ Thuật Phần Mềm 79 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + g.remove( index_of_child) Loại bỏ đối tượng vị trí index khỏi group g + g.numChildren Trả số lướng phần tử group 4.2 Sự kiện đối tượng hiển thị (multitouch, tap, touch)  Thêm kiện đối tượng – Obj.addEventListener( “touch” , functouch )  Xóa kiện đối tượng – Obj.removeEventListener( “touch” , functouch )  Multitouch Mã (Lua): system.activate( "multitouch" ) – Khi kích hoạt multitouch, bạn listen touch events cách đăng ký "touch" event listener đối tượng(s), xác mơ tả phát Touch Sau đó, so sánh thuộc tính event.id để xác định cụ thể trình tự kiện touch trả Mã (Lua): system.activate( "multitouch" ) local myRectangle = display.newRect( 0, 0, 320, 480 ) local function multitouchListener( event ) print( "Phase: " event.phase ) print( "Location: " event.x "," event.y ) print( "Unique touch ID: " tostring(event.id) ) print( " " ) return true end myRectangle:addEventListener( "touch", multitouchListener )  Phát Tap – Các thuộc tính event trả từ tap bao gồm: + event.target - tham chiếu đến đối tượng tap + event.name – string tap Chuyên ngành Kỹ Thuật Phần Mềm 80 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + event.numTaps – number tap hình Delay mặc định với tap dãy 0, thời gian điều chỉnh với hàm system.setTapDelay() – event.x/event.y - vị trí x y tap, tọa độ nội dung Mã (Lua): local function myTapListener( event ) Code thực thi button tapped print( "object tapped = " tostring(event.target) ) 'event.target' đối tượng tapped return true end local myButton = display.newRect( 100, 100, 200, 50 ) myButton:addEventListener( "tap", myTapListener ) add "tap" listener vào đối tượng  Phát touch – Các thuộc tính event trả từ touch bao gồm: + event.id - định danh để phân biệt Multitouch qua touch event khác Xem Multitouch để biết thêm chi tiết + event.target - tham chiếu đến đối tượng touch + event.name – giá trị string touch + event.phase - phase hình touch mơ tả + event.time - thời gian mili giây kể từ bắt đầu ứng dụng, truy cập từ bên hàm touch listener + event.x/event.y - vị trí x y touch, tọa độ nội dung – event.xStart/event.yStart - vị trí x y touch từ "begin" phase trình tự touch, tọa độ nội dung Mã (Lua): local function myTouchListener( event ) if ( event.phase == "began" ) then code thực thi button touched print( "object touched = " tostring(event.target) ) 'event.target' is the touched object elseif ( event.phase == "moved" ) then code thực thi touch di chuyển đối tượng print( "touch location in content coordinates = " event.x "," event.y ) elseif ( event.phase == "ended" ) then code thực thi người dùng nhấc tay khỏi đối tượng print( "touch ended on object " tostring(event.target) ) end return true chặn việc truyền touch vào đối tượng bên end local myButton = display.newRect( 100, 100, 200, 50 ) Chuyên ngành Kỹ Thuật Phần Mềm 81 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT myButton:addEventListener( "touch", myTouchListener ) add "touch" listener vào đối tượng 4.3 Sự kiện vật lý cho đối tượng (physics)  Thêm kiện vật lý physics.addBody(object, bodyType, [,radius=r] [,isSensor=false]}) {density=d, friction=f, bounce=b – bodyType trạng thái thể vật lý, gồm giá trị dynamic, static or kinematic + static: đối tượng vị trí đặt ban đầu + dynamic: Bị ảnh hưởng trọng lực va chạm với đối tượng khác + kinematic: Bị ảnh hưởng lực tác động + Lưu ý: sử dụng addBody khơng khai báo [bodyType] [bodyType] mặc định “dynamic” – properties bao gồm số tham số sau: + density: khối lượng thể vật lý Giá trị mặc định 1.0 + friction: độ ma sát thể vật lý Giá trị không âm Giá trị có nghĩa khơng có ma sát 1.0 có nghĩa ma sát mạnh Giá trị mặc định 0.3 + bounce: độ nhảy thể vật lý gặp va chạm Giá trị mặc định 0.2 + shape: tham số hình dạng dùng để tạo thể vật lý hình đa giác Đây table Lua x y phối hợp cặp, cặp xác định điểm đỉnh cho hình dạng Các tọa độ quy định liên quan đến trung tâm đối tượng hiển thị - đó, với (0,0) tương ứng với trung tâm đối tượng, điểm đỉnh (-20, -10) định nghĩa điểm 20 điểm ảnh bên trái trung tâm 10 điểm ảnh trung tâm + radius: tham số bán kính thể vật lý thể hình trịn + isSensor: tham số xác định thể vật lý có bị chuyển động bị vật khác đụng phải hay không, nhiên phát va chạm thơng qua kiện collision tính tắt Giá trị mặc định true – Ví dụ: local m_physics = require(“physics”) m_physics.start() local m_rect = display.newRect( 0,420,800,60 ) m_physics.addBody( m_rect, “static”, {desity=1.0, friction=0.5, bounce=0.3 }) local m_circle = display.newCircle( 100,100,30 ) Chuyên ngành Kỹ Thuật Phần Mềm 82 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT m_physics.addBody( m_circle, {desity=3.0, friction=1, bounce=0.3 , radius=30})  Liên kết với đối tượng vật lý Mã (Lua): physics.newJoint( jointType, … ) – Với jointType: + “pivot” + “distance” + “pistion” + “friction” + “weld” + “wheel” + “pulley” + “touch” + “rope” + “gear” – Ví dụ: local myJoint = physics.newJoint( “pivot” , createA , createB , 200 , 300 ) 4.4 Chuyển trang  Với storyboard (cũ) – Để sử dụng chức chuyển trang storyboard ta cần require thư viện storyboard Mã Lua: local storyboard = require “storyboard” – Các hàm thường dùng: + storyboard.getCurrentSceneName() Lấy tên trang + storyboard.getPrevious() Lấy tên trang trước + storyboard.getScene() Tham chiếu đến trang định + storyboard.gotoScene() Đi đến trang định + storyboard.hideOverlay() Ẩn/ xóa trang che phủ + storyboard.loadScene() Tải trước trang định + storyboard.newScene() Tạo trang + storyboard.printMemUsage() In nhớ sử dụng + storyboard.purgeAll() Xóa tất trang tải + storyboard.purgeScene() Xóa trang định + storyboard.reloadScene() Tải lại trang định + storyboard.removeAll() Xóa tất trang tải + storyboard.removeScene() Xóa trang định Chuyên ngành Kỹ Thuật Phần Mềm 83 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + storyboard.showOverlay() Hiện trang che phủ  Với composer – Vừa qua, Coronalabs giới thiệu API Composer API Cũng giống Storyboard, API dùng để quản lý cảnh (scene) dự án game Nó cho phép bạn tạo file Lua đại diện cho cảnh (scene) ứng dụng/game bạn Khi bạn điều hướng đến cảnh khác nhau, Composer xử lý trình chuyển cảnh giúp bạn dễ dàng xóa đối tượng (hoặc biến) khơng cần thiết Nó cơng cụ hữu ích làm cho việc tạo quản lý trang game bạn dễ dàng Có nhiều điểm tương đồng với Storyboard , Composer cung cấp cấu trúc đơn giản có khả mở rộng cho việc quản lý cảnh game – Là thư viện dùng quản lý cảnh cho game Corona SDK Thư viện cung cấp cho nhà phát triển cách để tạo chuyển đổi cảnh cho game cách dễ dàng thông qua hàm sau: – composer.getScene() trả đối tượng scene định – composer.getSceneName() trả tên scene – composer.getVariable() trả giá trị biến – composer.gotoScene() chuyển đổi scene cụ thể – composer.hideOverlay() ẩn/loại bỏ overlay scene – composer.loadScene() tải scene xác định – composer.newScene() tạo đối tượng scene – composer.removeHidden() loại bỏ tất scene ngoại trừ scene hoạt động – composer.removeScene() loại bỏ scene định – composer.setVariable() đặt giá trị cho biến – composer.showOverlay() tải scene overlay scene hoạt động Ví dụ sau sử dụng để tạo nên đối tượng scene Lưu ý ví dụ bao gồm tất hàm kiện tiềm ẩn scene, bạn cần sử dụng kiện mà bạn muốn xử lý Mã (Lua): Require composer local composer = require("composer") Tạo composer local scene = composer.newScene() Hàm kiện create function scene:create(event) local sceneGroup = self.view Tạo đối tượng hiển thị Chuyên ngành Kỹ Thuật Phần Mềm 84 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT End Hàm kiện show function scene:show(event) local sceneGroup=self.view local phase=event.phase if ( phase == "will" ) then elseif ( phase == "did" ) then end end Hàm kiện ẩn function scene:hide(event) local sceneGroup = self.view local phase = event.phase if (phase == "will") then elseif (phase == "did") then end end Hàm kiện loại bỏ function scene:destroy(event) local sceneGroup = self.view end Thiết lập kiện lắng nghe scene:addEventListener("create", scene) scene:addEventListener("show", scene) scene:addEventListener("hide", scene) scene:addEventListener("destroy", scene) return scene 4.5 Đối tượng lớp widget Trong lớp widget có số hàm cụ thể như: newButton(), newPickerWheel(), newProgressView(), newScrollView(), newSegmentedControl(), newSlider(), newSpinner(), newStepper(), newSwitch(), newTabBar(), newTableView(), setTheme() Chuyên ngành Kỷ Thuật Phần Mềm 85 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT 4.6 Đối tượng lớp native Trong lớp native có số hàm cụ thể như: cancelAlert(), cancelWebPopup(), canShowPopup(), getFontNames(), getProperty(), getSync(), newFont(), newMapView(), newTextBox(), newTextField(), newVideo(), newWebView(), requestExit(), setActivityIndicator(), setKeyboardFocus(), setProperty(), showAlert(), showPopup(), showWebPopup(), setSync() 4.7 Thao tác với File  Read write file - liệu dạng text đơn giản, JSON, XML, liệu local SQLite, vv - cần thiết để phát triển ứng dụng Có vơ số trường hợp mà ứng dụng bạn cần phải read và/hoặc write file, vài trường hợp phổ biến : – Save/Load thiết lập người dùng thống kê khác – Save "app state" vào file read session sau này, người dùng quay trở lại xác nơi mà họ rời đi, ứng dụng thoát – Tạo file local HTML load native Web view – Load liệu từ file download từ máy chủ sử dụng liệu ứng dụng  Lấy đường dẫn file – Các hàm system.pathForFile() tảng tất thao tác với filetrong Corona Lua đòi hỏi toàn đường dẫn file read write, hệ điều hành di động iOS “che giấu” file hệ thống thông qua "sandboxing" Điều gây khó khăn xác định xác nơi mà file May mắn thay, Corona đơn giản hóa điều với hàm system.pathForFile() API trả đường dẫn mà tương thích với file I/O Mã Lua system.pathForFile( filename [, baseDirectory]) – Lưu ý: Tham số baseDirectory số tùy chọn tương ứng với thư mục sở mà file đặt Nếu không định, mặc định system.ResourceDirectory Xem phần System Directories để biết thêm thông tin  Writing Files (Ghi File) Mã Lua local saveData = "My app state data" local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory ) local file = io.open( path, "w" ) Chuyên ngành Kỷ Thuật Phần Mềm 86 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT file:write( saveData ) io.close( file ) file = nil – system.pathForFile() - trả đường dẫn cho file để write (myfile.txt) – io.open() - Hàm mở file để write (hoặc read) Nó trả file xử lý mới, thiết lập vào file Tham số thứ hai, "w", tương ứng với "mode" tin mở Mệnh lệnh bạn thực với file Trong trường hợp này, "w" write nói với Corona tạo (write) file mới, write đè lên file tồn – file: write() - Trong ví dụ này, nội dung biến SAVEDATA write vào file định – io.close() - đóng file xử lý kết thúc trình I/O  Reading Files (Đọc File) Mã Lua local path = system.pathForFile( "myfile.txt", system.DocumentsDirectory ) local file = io.open( path, "r" ) local savedData = file:read( "*a" ) io.close( file ) file = nil – io.open() - Hàm mở file trả file xử lý, thiết lập thành file ví dụ Lần này, tham số thứ hai phải thiết lập "r" tương ứng với chế độ read – file: read() - giả sử file mở chế độ read tương ứng, phương thức file:read() read nội dung file đặt vào biến savedData – io.close() - đóng file xử lý kết thúc trình I/O – Kiểu lấy nội dung ra: có trường hợp + *l: lấy dịng + *a: lấy tồn nội dung + *n: đọc dòng gặp chuỗi ký tự kết thúc  Reading Lines (Đọc dịng) – Một nhiệm vụ phổ biến read liệu xử lý line file sử dụng cho số mục đích Ví dụ, bạn có file văn thể danh sách sản phẩm với mức giá cho thứ, bạn vịng lập cho file theo lines output parse line (sản phẩm) riêng biệt – Hàm file:lines() kết hợp với vòng lặp for thực việc này: Mã Lua Chuyên ngành Kỷ Thuật Phần Mềm 87 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT local path = system.pathForFile("myfile.txt", system.DocumentsDirectory ) local file = io.open( path, "r" ) for line in file:lines() print( line ) end io.close( file ) file = nil – Quá trình trả line lần lặp tiếp tục không line Mỗi line sử dụng tồn nội dung phân tích thành thành phần nhỏ cách sử dụng mơ hình chuỗi  System Directories (Hệ thống thư mục) – Như nói trên, system.pathForFile() đòi hỏi đối số baseDirectory bạn muốn truy cập vào thư mục system.ResourceDirectory mặc định – Dưới tất bốn thư mục hệ thống để read/write: + system.ResourceDirectory - read - Thư mục dùng để thư mục dự án cốt lõi - vị trí tương tự file main.lua Đây thư mục sở mặc định system.pathForFile() + system.DocumentsDirectory - read/write - Thư mục thiết kế dành cho ứng dụng tự tạo nó, ví dụ liệu người dùng, "app state" data, điều mà ứng dụng tạo sau cài đặt Các file thư mục tồn với ứng dụng - có nghĩa là, ứng dụng remove cách rõ ràng từ thiết bị Trên iOS, file vị trí hỗ trợ đồng + system.TemporaryDirectory - read/write - Thư mục dành cho phiên liệu File văn vị trí thường tồn ứng dụng chạy, hệ điều hành có quyền xóa liệu lúc Vì vậy, khơng đặt liệu quan trọng thư mục + system.CachesDirectory - read/write - Các file system.CachesDirectory thường có "tuổi thọ" dài so với system.TemporaryDirectory, điều không đáng tin cậy bạn không nên đặt liệu quan trọng thư mục Trên iOS, file vị trí khơng hỗ trợ đồng – Chú ý: + Trên thiết bị Android, khơng có system.ResourceDirectory theo nghĩa đen tất resouce file nằm bên file apk nén Chuyên ngành Kỷ Thuật Phần Mềm 88 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + Trong Corona Simulator, vị trí system.DocumentsDirectory system.TemporaryDirectory đặt thư mục sandbox cho ứng dụng Bạn xem thư mục file bên cách chọn File → Show Project Sandbox Simulator + Trên iOS Mac OS X, native.setSync() API sử dụng để thiết lập flag iCloud tự động lưu file system.DocumentsDirectory + Khi truy cập system.ResourceDirectory thông qua system.pathForFile() , thiết lập tham số tên file nil trả đường dẫn thư mục mà không cần kiểm tra file tồn Nếu bạn cần phải kiểm tra diện file, xem Testing if Files Exist phần 4.8 Thao tác với database  Để quản lý liệu cho ứng dụng bạn cách dễ dàng hơn, sqlite giải pháp tốt Hiện hệ điều hành điện thoại tích hợp trình biên dịch sqlite Corona cung cấp cho thư viện sqlite3 (database) tương đối dễ sử dụng, bao gồm hàm sau: – sqlite3.open(path) Mở CSDL theo đường dẫn path – sqlite3.version() Trả phiên sqlite – db:exec(Sql_Commad) Thực lệnh SQL sở liệu – db:nrows(Sql_Commad) Trả mẫu tin từ câu lệnh truy vấn Sql – db:close() Đóng sở liệu Để hiểu rõ cách sử dụng sqlite3, sau ví dụ đơn giản: local sqlite3 = require( "sqlite3" ) local db = sqlite3.open_memory() db:exec[[ CREATE TABLE test (id INTEGER PRIMARY KEY, content); INSERT INTO test VALUES (NULL, 'Hello World'); INSERT INTO test VALUES (NULL, 'Hello Lua'); INSERT INTO test VALUES (NULL, 'Hello Sqlite3') ]] print( "version " sqlite3.version() ) for row in db:nrows("SELECT * FROM test") local t = display.newText( row.content, 20, 30*row.id, nil, 16 ) t:setFillColor( 1, 0, ) end Chuyên ngành Kỷ Thuật Phần Mềm 89 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT 4.9 Transition, Timer  Khi làm game, thường xuyên sử dụng thư viện có sẵn Corona transition Nó cung cấp cho số hàm phương thức di chuyển đối tượng hiển thị nhóm đối tượng hiển thị  transition.to (): Một hiệu ứng di chuyển đối tượng hiển thị Chúng ta tùy chọn sử dụng để di chuyển, xoay, làm mờ dần đối tượng thời gian định Mã (Lua) local hvuong = display.newRect( 50, 50, 100, 100 ) local listener1 = function( obj ) print( "Hoàn thành!") end Transiton.to from để ngược lại local m_tran_1=transition.to(hvuong,{time=3000,alpha=0,x=300,y=500,onCom plete=listener1})  transition.from (): Một hiệu ứng chuyển động ngược lại với hàm transition.to () Nó di chuyển từ vị trí ta cấu hình đến vị trí  transition.pause (): Hàm dùng để tạm dừng transition tạm dừng tất transition game  transition.resume(): Hàm dùng để tiếp tục lại tất transition bị tạm dừng hàm transition.pause  transition.cancel (): Hàm dùng để hủy tất transition game  Một số phương thức thường sử dụng – Với transition Corona, có nhiều phương thức như: Chuyên ngành Kỷ Thuật Phần Mềm 90 Khoa CNTT & TT Luận văn tốt nghiệp Đại học khóa 37 - 2015 Trường ĐHCT + + + + + + + + transition.blink() transition.dissolve() transition.fadeIn() transition.fadeOut() transition.moveBy() transition.moveTo() transition.scaleBy() transition.scaleTo() – Tuy nhiên làm game, hai phương thức mà thường sử dụng transition.scaleTo() transition.blink() – transition.scaleTo() + Một hiệu ứng dùng để làm cho đối tượng ta to thu nhỏ lại Ví dụ tạo hình vng sử dụng transition.scaleTo() để phóng to hình vng với kích thước gấp lần so với kích thước ban đầu mờ dần phóng to Thời gian phóng to giây Mã (Lua): local hvuong = display.newRect( 240, 400, 100, 100 ) transition.scaleTo( hvuong, { xScale=5.0, yScale=5, time=1000, alpha=0 }) – transition.blink() + Hàm dùng để nhấp nháy đối tượng hiển thị Ví dụ dùng transition.blink() để làm nhấp nháy hình vng thời gian cho lần nhấp nháy giây Mã (Lua): local hvuong = display.newRect( 200, 100, 100, 100 ) transition.blink( hvuong, { time=1000 } ) Chuyên ngành Kỷ Thuật Phần Mềm 91 Khoa CNTT & TT ... thiết bị có kích cỡ độ phân giải khác cách dễ dàng Từ nội dung trên, tác giả đề xuất đề tài “TÌM HIỂU CORONA SDK VÀ LUA, ỨNG DỤNG PHÁT TRIỂN GAME TRÊN THIẾT BỊ DI ĐỘNG” Game cụ thể phát triển. .. dàng sử dụng lại với chức cốt lõi cần thiết Sản phẩm luận văn game (Spider Ball) chạy thiết bị di động, máy tính bảng chạy hệ điều hành Android Game phát triển ngơn ngữ Lua cơng cụ phát triển trị... bùng nổ thiết bị thông minh vài năm qua dẫn đến đời thị trường tiềm - thị trường ứng dụng di động Thị trường có tốc độ phát triển nhanh chóng mạnh mẽ, đặc biệt lĩnh vực lập trình game di động,

Ngày đăng: 12/01/2016, 19:34

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan