從零開始寫一個武俠冒險遊戲-0-開發框架Codea簡介

從零開始寫一個武俠冒險遊戲-0-開發框架Codea簡介

  • 做者:FreeBlues
  • 修訂記錄
    • 2016.06.21 初稿完成.
    • 2016.08.03 增長對 XCode 項目文件的說明.

概述

本遊戲全程使用一款運行於 iPad 上的開發工具類 APP--Codea 來開發, Codea 是一款 輕量級 + 全功能的開發工具, 它既是一個:html

  • 運行時庫-Runtime

也是一個:ios

  • 框架-Frameworks

仍是一個:git

  • 集成開發環境-IDE

更是一個:github

  • 調試服務器-debugSever, 可經過瀏覽器來雲端調試代碼.

它仍是 Lua 語言的一種擴展, 本質上它就是一個運行於 iPad 上能夠動態加載運行 Lua 代碼的應用程序.編程

它實現了一個很是易於使用的編程框架(相似於 ProcessingOpenFrameWorks):json

  • setup() 函數, 負責初始化工做, 程序啓動時運行一次;
  • draw() 函數, 負責屏幕繪製, 1秒鐘刷新 60 次;
  • touched(touch) 函數, 負責處理屏幕觸摸;
  • keyboard(key) 函數, 負責處理鍵盤操做;
  • collide(contact) 函數, 負責處理物理模擬中的碰撞檢測;
  • orientationchanged(newOrientation) 函數, 負責檢測屏幕位置(是否翻轉)

用它提供的功能豐富的函數你能夠在 iPad 上編寫各類程序, 它提供了:xcode

  • 基本繪圖函數, 實現一些基本的繪圖函數
  • 高級繪圖函數, 支持 OpenGL ES 2.0/3.0, 直接編寫 shader 代碼, 即時查看運行結果;
  • Lua 語言的大多數函數, 如 table相關, string 相關, os 相關, 以及 math 相關的一些函數, 還包括協程 coroutine;
  • Lua 的一些庫, 如 socket, lpeg, json
  • 觸控函數, 負責處理屏幕觸摸事件;
  • 調試函數, 負責處理程序調試工做;
  • 物理模擬函數, 封裝 box2D 提供了相關的物理模擬函數;
  • 動畫函數, 一個專門的動畫類, 能夠利用它來實現各類動畫效果;
  • 聲音函數, 負責處理播放聲音以及生成各類音效;
  • 顯示函數, 負責處理顯示模式設置以及視頻錄製等等
  • 矢量函數, 提供了二維, 三維, 四維向量以及相關的各類操做;
  • 傳感器函數, 負責處理 GPS 定位傳感器和 加速度 傳感器;
  • 網絡函數, 提供了封裝後的 http.request() 函數
  • 存儲函數, 提供了各類存取函數, 用於存取遊戲數據到 iPad 上.

它提供了一個 IDE, 能夠編輯/調試/運行代碼, 很是適合觸屏操做. 也很是適合那些但願能隨時隨地拿起平板就能編程的開發者, 據本軟件開發者 Simen 自述, 最初就是由於他想在平板電腦上隨時運行一些代碼片斷, 因而萌生了這個想法, 結果一步步搞出這麼一個超級方便很受歡迎的 iPad 開發工具來.瀏覽器

它能夠把你編寫的代碼導出爲一個 XCode 項目, 而後編譯成一個真正的 APP 發佈到 APP Store, 固然了, 須要你擁有一個開發者帳號.服務器

我用過不少 iPad 上的編程工具, 最喜歡的一款是 Codea , 並且爲了更好地發揮它的做用, 專門去認真學了 Lua.網絡

接下來咱們會對 Codea 作一個介紹, 讓讀者對咱們後續即將使用的開發工具備一個初步瞭解.

界面

啓動進入

啓動 Codea 後進入主界面, 以下:

輸入圖片說明

示例

Codea 自帶了一些示例程序, 以下:

輸入圖片說明

左側菜單欄

點開左側菜單欄, 出現 4 個選項

輸入圖片說明

內置函數手冊

Codea 中內置了所有的函數說明, 很是方便在編程時隨手查閱

輸入圖片說明

shader實驗室

左側菜單欄的第二項是一個 shader 實驗室, 你能夠在裏面調試本身的 shader 代碼

輸入圖片說明

自帶素材庫

左側菜單欄第三項是 Codea 自帶的素材庫, 有一些能夠無償使用的圖片素材和音樂音效素材, 還有一些 shader模板, 用戶也能夠自行添加素材到素材庫

輸入圖片說明

編輯界面

編輯界面自帶聯想輸入, 很是方便直接在 Codea 上輸入代碼

輸入圖片說明

輸入圖片說明

程序框架說明

Codea 的運行機制是這樣的:

  • setup() 只在程序啓動時執行一次
  • draw() 在程序執行完 setup() 後反覆循環執行, 每秒執行 60
  • touched()draw() 相似, 也是反覆循環執行

簡單說, 就是相似於這樣的一個程序結構:

setup()

while true do
    ...
    draw()
    touched(touch)
    ...
end

若是讀者有過使用 ProcessingOpenFrameWorks 的經驗, 就比較熟悉這種框架了, 這種框架的優勢就是結構簡單易懂, 流程很是清晰, 容易上手, 並且功能也不弱, 反而 Cocos2d-x 的那種又是場景, 又是導演的框架比較麻煩.

若是你願意, 也很容易在它的基礎上本身搞一個 MVC 架構出來, 若是你想實現更復雜的流程控制, 能夠經過 Luacoroutine 自行擴展, 也能夠參考本教程提供的用 coroutine 實現的 Threads 類.

主要函數說明

Codea 的函數大多數都支持可變參數, 根據輸入實參的個數決定對應哪些形參, 好像在面向對象中叫多態. 下面在每種函數中選擇兩個經常使用的函數

基本繪圖函數

  • background( )
    • 語法
    • background( gray )
    • background( gray, alpha )
    • background( red, green, blue )
    • background( red, green, blue, alpha )
    • background( color )
  • rect( )
    • 語法
    • rect( x, y, width, height )
  • sprite( name, x, y )
    • 語法
    • sprite( name, x, y )
    • sprite( name, x, y, width )
    • sprite( name, x, y, width, height )
    • sprite( image, x, y )
    • sprite( image, x, y, width )
    • sprite( image, x, y, width, height )

高級繪圖函數

提供 shadermesh

支持 OpenGL ES 2.0/3.0

Lua 語言

Lua中的 , 時間,字符串數學運算 以及一部分 os 函數

觸控函數

負責處理屏幕觸摸事件;

調試函數

負責處理程序調試工做;

物理模擬函數

封裝 box2D 提供了相關的物理模擬函數;

動畫函數

一個專門的動畫類, 能夠利用它來實現各類動畫效果;

聲音函數

負責處理播放聲音以及生成各類音效;

顯示函數

負責處理顯示模式設置以及視頻錄製等等

矢量函數

提供了二維, 三維, 四維向量以及相關的各類操做;

傳感器函數

負責處理 GPS 定位傳感器和 加速度 傳感器;

網絡函數

提供了封裝後的 http.request() 函數

存儲函數

提供了各類存取函數, 用於存取遊戲數據到 iPad 上.

其餘在 iPad 上運行的開發工具

除了 Codea, 還有不少能夠運行在 iPad 上的編程工具, 好比 Processing, TechBASIC 等等, 它們各有所長.

蘋果在最近的 WWDC 上宣佈 iOS 10 會提供一款名爲 Swift Playground 的免費開發工具, 看來隨着平板電腦性能的提高, 用平板編寫代碼已是趨勢所向.

如何使用本教程中的源碼

你有兩種方式來運行本教程的示例, 一種是下載源碼, 直接在 iPad 上經過 Codea 來運行, 另外一種是下載對應的 XCode 項目文件包, 而後在 XCode 中把它編譯爲一個 ipa 應用, 再把它加載到模擬器上運行.

直接在 iPad 上用 Codea 加載代碼

若是你有 iPad, 而且購買了 Codea, 那麼你能夠打開 Codea, 新建一個項目, 把例程代碼拷貝進去, 同時要把例程中用到的圖像資源下載拷貝到 Codea 的素材庫目錄下, 通常是 Documents, 而後就能夠運行了.

這種方法最簡單, 也最方便, 惟一的不便之處是須要預先手動下載保存好圖片素材(不事後續我會寫幾個自動下載保存圖片的函數來提供更方便的使用)

經過 XCode 的 iOS 模擬器來運行

若是你沒有 iPad, 或者雖然有 iPad, 可是暫時還不許備花 15 美圓購買一份 Codea, 那麼你還能夠經過模擬器來運行.

這就須要你有一臺安裝了 XCodeMac 電腦, 或者你有一個安裝了 XCodeOSX 虛擬機, 你只要把每章對應的 XCode 項目文件包下載回去, 而後在 XCode 中打開它, 編譯運行, 就能夠在模擬器中看到運行結果了.

並且你也能夠在 XCode 中修改代碼, 從新編譯查看效果.

XCode項目文件夾結構

項目文件夾結構以下:

Air:Write-A-Adventure-Game-From-Zero admin$ tree
.
MyAdventureGame
├── Assets
│   ├── ...
├── Libs 
│   ├── ...
├── MyAdventureGame
│   ├──...
├── MyAdventureGame.codea
│   ├──...
├── MyAdventureGame.xcodeproj
│   ├──...
└── libversion

其中咱們編寫的 Lua 腳本放在 MyAdventureGame.codea 目錄下, 以 main.lua 命名, 以下:

Air:Write-A-Adventure-Game-From-Zero admin$ tree ./MyAdventureGame/MyAdventureGame.codea
./MyAdventureGame/MyAdventureGame.codea
├── Info.plist
├── Main.lua
├── Sprites.lua
└── Status.lua

0 directories, 4 files
Air:Write-A-Adventure-Game-From-Zero admin$

Codea的運行時庫文件

  • 注意: 在用 XCode 編譯項目時, 須要用到 Codea 的兩個庫文件: libcodea.alibtools.a.

當前版本 2.3.2, XCode 會自動從 Codea 官網下載, 不過貌似會被屏蔽, 再加上這兩個文件稍微大了點(一個20 M, 一個 50M), 就沒有放在 github 上, 改成放到百度網盤上Codea庫文件下載, 下載回來後解壓獲得名爲 libcodea.alibtools.a 的兩個文件, 將其拷貝到項目文件夾的 Libs 目錄下便可.

參考資源

官網函數手冊
官方wiki
官網論壇
中文函數手冊

全部章節連接

Github項目地址

Github項目地址, 源代碼放在 src/ 目錄下, 圖片素材放在 assets/ 目錄下, XCode項目文件放在 MyAdventureGame 目錄下, 整個項目文件結構以下:

Air:Write-A-Adventure-Game-From-Zero admin$ tree
.
├── MyAdventureGame
│   ├── Assets
│   │   ├── ...
│   ├── Libs 
│   │   ├── ...
│   ├── MyAdventureGame
│   │   ├──...
│   ├── MyAdventureGame.codea
│   │   ├──...
│   ├── MyAdventureGame.xcodeproj
│   │   ├──...
│   └── libversion
├── README.md
├── Vim 列編輯功能詳細講解.md
├── assets
│   ├── ...
│   └── runner.png
├── src
│   ├── c01.lua
│   ├── c02.lua
│   ├── c03.lua
│   ├── c04.lua
│   ├── c05.lua
│   ├── c06-01.lua
│   ├── c06-02.lua
│   ├── c06-03.lua
│   └── c06.lua
├── 從零開始寫一個武俠冒險遊戲-0-開發框架Codea簡介.md
├── 從零開始寫一個武俠冒險遊戲-1-狀態原型.md
├── 從零開始寫一個武俠冒險遊戲-2-幀動畫.md
├── 從零開始寫一個武俠冒險遊戲-3-地圖生成.md
├── 從零開始寫一個武俠冒險遊戲-4-第一次整合.md
├── 從零開始寫一個武俠冒險遊戲-5-使用協程.md
├── 從零開始寫一個武俠冒險遊戲-6-用GPU提高性能(1).md
├── 從零開始寫一個武俠冒險遊戲-6-用GPU提高性能(2).md
└── 從零開始寫一個武俠冒險遊戲-6-用GPU提高性能(3).md

2 directories, 26 files
Air:Write-A-Adventure-Game-From-Zero admin$
相關文章
相關標籤/搜索