Quick-cocos2d-x 与COCOS2DX 区别
生活随笔
收集整理的這篇文章主要介紹了
Quick-cocos2d-x 与COCOS2DX 区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
quick-cocos2d-x(后文簡稱 quick)與 cocos2d-x 的關系,用一句話概括:quick 是 cocos2d-x 針對 Lua 的豪華套裝威力加強版。
項目地址:quick-cocos2d-x 項目 Wiki: wiki
那 quick 與 cocos2d-x 相比到底有什么區別,又有什么加強呢?這篇文章就是答案:
為什么會有 quick
quick 和 cocos2d-x 的差別
quick 由哪些部分組成
應該選擇 Lua 還是 JavaScript
怎么入門 quick
為什么會有 quick
cocos2d-x 是一個用 C++ 開發的游戲引擎,其架構設計和 API 基本上是照搬的 cocos2d-iphone(一個用 Objective-C 的 iOS 游戲開發引擎)。
由于 C++ 對開發人員要求較高,所以網龍科技利用 tolua++ 這個工具,將 cocos2d-x 的 C++ 接口轉為了 Lua 接口(這種將 C++ 接口導出為 Lua 接口的庫通常稱為 luabinding)。讓開發者可以使用 Lua 這種簡單易懂的腳本語言來編寫游戲,從而大大提高開發效率。
大概在 2012 年上半年,我們公司開始使用 cocos2d-x + Lua 來開發游戲。但是發現當時 cocos2d-x 對 Lua 的支持還存在相當多不完善的地方。所以我重寫了整個 luabinding 的支持代碼,解決了內存泄露、只能使用全局函數做回調等問題。
在 cocos2d-x 2.0 發布后,luabinding 又進行了不少改進和完善。截止到 cocos2d-x 2.1.4,整個 luabinding 已經可以說是相當穩定了。所以《我是 MT》、《大掌門》這些賺錢像印錢的游戲,就紛紛采用 cocos2d-x + Lua 的解決方案了。
可惜 cocos2d-x 團隊從 2012 年以來一直在強力推廣 cocos2d-x 的 JavaScript 解決方案,所以在 Lua 支持上基本上就沒有什么大動作了。而從我們使用 Lua 解決方案的開發商看來,需要 luabinding 具備更強大的功能,因此這就是我們開發 quick 的最初原因。
quick 的目標:
降低學習曲線
提高易用性
創建一個精簡、但更容易擴展的架構
quick 和 cocos2d-x 的差別
雖然 cocos2d-x luabinding 已經很完善了,但是要開發一個游戲,我們還需要做許多基礎工作。
將 luabinding 導出的 C++ 接口重新封裝成 Lua 風格的接口是最基本的工作。重新封裝后的接口應該更容易學習和使用,并且一些 C++ 和 Lua 之間數據格式轉換也應該隱藏起來。而這就是 quick 里首先實現的目標。
看看下面的代碼:
-- 載入 Sprite Sheet
local frameCache = CCSpriteFrameCache:sharedSpriteFrameCache()
frameCache:addSpriteFramesWithFile("Sprites.plist", "Sprites.png")
-- 構造一個幀動畫序列 Run0001.png -> Run0010.png
local frames = CCArray:create()
for index = 1, 10 do
? ? local frameName = string.format("Run%04d.png", index)
? ? local frame = frameCache:spriteFrameByName(frameName)
? ? frames:addObject(frame)
end
-- 創建 CCSprite 對象
local firstFrame = tolua.cast(frames:objectAtIndex(0), "CCSpriteFrame")
local sprite = CCSprite:createWithSpriteFrame(firstFrame)
-- 在 CCSprite 之上播放動畫(用 0.5 秒播放完 10 幀)
local animation = CCAnimation:createWithSpriteFrames(frames, 0.5 / 10)
sprite:runAction(CCRepeatForever:create(CCAnimate:create(animation)))
這段代碼的功能在游戲中會反復出現,所以通常會封裝成幾個簡單的函數。而 quick 里封裝后的接口要完成同樣功能會使用如下代碼:
display.addSpriteFramesWithFile("Sprites.plist", "Sprites.png")
local frames = display.newFrames("Run%04d.png", 1, 10)
local sprite = display.newSpriteWithFrame(frames[1])
local animation = display.newAnimation(frames, 0.5 / 10)
sprite:playAnimationForever(animation)
通過這個對比,可以看出二次封裝是多么必要。而 quick 提供了一個 Lua Framework,封裝了大量最常用的接口。
cocos2d-x 是一個功能完善的游戲引擎,但對于一個能掙錢的游戲來說,cocos2d-x 還缺少很多必須的功能。所以 quick 在 cocos2d-x 基礎上添加了更多游戲必須的功能,例如完善的 HTTP 和 Socket 網絡功能、數據加密解密、設備功能訪問等等。
游戲的玩法做得差不多了,就需要開始集成付費充值、統計、社會化分享、好友鏈等各種第三方 SDK。
在 iOS 和 Android 平臺上做這些工作,傳統做法是分別編寫 Objective-C 和 Java 的接口代碼,然后再用 C++ 中轉,借助 tolua++ 導出給 Lua 使用。這種做法不但繁瑣,而且像 Java 和 C++ 的交互存在相當多的困難,所以開發效率極低。
quick 針對這個問題,特別開發了 LuaObjectiveCBridge 和 LuaJavaBridge 兩個模塊。利用這兩個模塊,我們在接入 SDK 時,就不再需要 C++ 中轉層,也不需要 tolua++,由此省下的工作量相當驚人。
而且 quick 的附屬項目會提供大量現成的 SDK 封裝,進一步提高開發效率,讓開發商把主要的資源花在游戲玩法上。
在開發過程中,需要不斷測試。而 cocos2d-x 自帶的 Windows 和 Mac 模擬器功能太簡單。quick 特別開發了功能完備的模擬器,讓整個游戲在開發階段的大部分時間里都不需要借助真機就可以進行(小伙伴們都知道,Android 真機調試那么是多么的蛋疼)。
看看 quick 華麗的模擬器吧 :)
除了上述內容,quick 里還包含了物理引擎 Chipmunk 2D 的 Lua 封裝(相信我,你不可能找到比這個更容易使用的物理引擎接口)、骨骼動畫播放(支持 DragonBones、CocoStudio)、高性能的 LuaJIT 虛擬機等等。
總結而言,quick 和 cocos2d-x 的主要區別有如下幾點:
更完善的 Lua 支持,包括一個 Lua 框架對 C++ 接口進行了二次封裝
補充了大量 cocos2d-x 沒有提供,但游戲需要的功能
為提高開發效率,提供了 Objective-C 和 Java 的橋接模塊,以及強化的 Windows/Mac 模擬器
除了這些重大區別外,quick 還在細節上做了一些調整和完善。并且后續還會將來自 cocos2d-x 最新開發分支(devel 3.0)的一些重要 bugfix 和有價值的新功能移植到 quick 中。
當然,當 cocos2d-x 3.0 完全穩定下來的時候,quick 也會做相應的升級。
quick 由哪些部分組成
quick 由幾個主要部分組成:
cocos2d-x:目前基于 cocos2d-x 2.1.4 版本
tolua++:用于將 C++ 接口導出給 Lua 腳本使用
LuaJIT:最快的 Lua 虛擬機
cocos2d-x-extra:擴展功能,包括數據加密編碼、網絡傳輸、設備功能訪問等
Chipmunk 2D:物理引擎,以及相應的 cocos2d-x 和 Lua 封裝接口
CSArmature:一個骨骼動畫播放庫,支持 DragonBones 和 CocoStudio 創建的骨骼動畫
除此之外,還包含一些 Lua 的擴展:
lua_extensions:一些必備的 Lua 模塊,包括 JSON、ZLib、LuaFileSystem、LuaSocket 等
LuaJavaBridge:簡單的 Lua - Java 交互接口,簡化 SDK 集成
LuaObjectiveCBridge:簡單的 Lua - Objective-C 交互接口
應該選擇 Lua 還是 JavaScript
目前 cocos2d-x 支持兩種腳本語言的 binding,從我個人了解,各自的情況列表如下:
Features Lua? ?JavaScript
完全訪問 cocos2d-x API ? YES YES
iOS 平臺 YES YES
Android 平臺 YES YES
Windows 平臺 YES YES
Mac 平臺 YES YES
Linux 平臺 YES* YES
HTML5 平臺 NO YES
JIT 支持 YES YES
編譯為字節碼 YES YES
字節碼是否可以反編譯 NO NO
運行性能 HIGH LOW
接入 SDK 工作量 簡單 復雜,通過 C++ 中轉
導出自定義 C++ 類 簡單 復雜
而我最看重其中幾點:
運行效率:LuaJIT 編譯的字節碼在 JIT 可用時,運行效率可以接近 C 的程度。而在 iOS 這種不支持 JIT 的環境里,Lua 的運行效率比 JavaScript 高很多()。
是否容易擴展:Lua 從設計時就是作為嵌入式語言來設計的,所以需要將某個 C/C++ 接口導出給 Lua 使用,那是相當輕松的事情。
源代碼保護:LuaJIT 編譯的字節碼目前是無法反編譯的,因為 LuaJIT 在編譯時不是 1:1 直接轉換源代碼,而是對源代碼做了相當多的深入優化。LuaJIT 編譯出的字節碼體積是 Lua 編譯字節碼的三分之一,由此可見優化程度。
客觀的說,JavaScript binding 最大的優勢是以前大量的 JS 前端開發人員可以很容易的上手,而且支持 HTML5 平臺。但如果從手游體驗來說,Lua 的運行效率是很重要的優勢。
怎么入門 quick
東西再好,學不會也是白搭,所以這篇文章的重點是這個部分,前面都是廣告 :)
學習 Lua
Lua 是一種簡單易用的語言。學習這種語言最好的方式就是花幾天時間寫代碼,然后在命令行中運行。
重點:
table 在 Lua 中是一種萬能數據結構,既可以表示數組,又可以表示名值對。這和 PHP 里的 array 一樣。唯一的區別在于 table 用作數組時,第一個元素的下標是從 1 開始。
function 在 Lua 里是 first-class 類型,也就是說你可以把一個 function 當做普通值,傳遞來傳遞去,這和其他函數式編程語言是一樣的,例如 JavaScript。
Lua 里用 table 配合 metatable 實現面向對象。由于 C++ 對象導出到 Lua 里后就是這樣的機制,所以這個一定要搞明白。
搞清楚在定義方法和調用方法的時候,用“.”和“:”的區別。
嘗試修改和完善 quick 的各個示例程序
用 quick-x-player(quick 里牛叉的模擬器)運行 sample 目錄里的各個例子,無差別爆改。改一點就按 F5(Mac 上按 CMD+R)刷新模擬器看看效果(做過 Web 前端的童鞋感動吧),要不了幾天就成熟練工了。
最常遇到的問題:
這個方法返回了一個什么對象?
因為 quick 里對 C++ 接口進行了二次封裝,所以一些框架的方法返回的對象不一定很明確。但大多數可以從方法名上推測出來:
display.newSprite() 創建 CCSprite 對象
display.newFrames() 創建包含多個 CCSpriteFrame 對象的數組
ui.newImageMenuItem() 創建 CCImgeMenuItem 對象
ui.newMenu() 創建 CCMenu 對象
實在看不出來,那就去 framework 目錄里翻源代碼吧。
這個方法是干嘛的?
首先,從 framework 里找。找不到就去 cocos2d-x 里找。還找不到,那就是 cocos2d-x-extra 或者第三方庫提供的方法。這里強烈推薦 Sublime Text 這個超神的編輯器,全文檢索神馬的完全不在話下。
為什么代碼沒有預期的效果?
不管是 Lua 還是 quick,當前的版本都非常非常穩定。所以遇到這種情況,不要首先懷疑語言特征或者引擎,而是多做測試,看看問題到底是怎么發生的。
在哪里尋求幫助?
目前 quick 還沒有專門的社區,所以如果你想尋求幫助,最快捷的途徑就是 QQ 群:284148017 。當然,不會有誰成天沒事兒在那里義務解答,所以 QQ 群更多是交流經驗的地方。未來,quick 會建立自己的社區,方便大家的交流。
熟悉 cocos2d-x API
本質上,quick 是 cocos2d-x 的一個增強版本,所以熟悉 cocos2d-x API 是基本要求。好在 cocos2d-x 目前已經有相當豐富的學習資料,即便是 C++ 代碼的,改寫為 Lua 也非常簡單,也就語法的區別而已。
這個階段可以用 quick 里的 CoinFlip 示例為基礎,添加更多玩法或功能。CoinFlip 已經具備一個完整游戲的雛形,所以能夠在 CoinFlip 中自在添加功能時,也就達到可以獨立開發游戲的程度了。
學習使用擴展功能和第三方 Lua 擴展
quick 里包含了相當豐富的擴展庫,從支付到網絡服務都應有盡有。而這些功能也是游戲從項目變成產品時必須的,所以在熟練掌握擴展功能可以大大提高開發效率,避免重復勞動。
在學習擴展功能時,要了解這個擴展功能是基于什么開源項目來開發的,這樣才能找到有針對性的學習資源。例如 LuaSocket、LuaFileSystem 等 Lua 擴展、Chipmunk 2D 物理引擎等等,它們的用法在各自項目的網站上都能找到。
導出自己的 C++ 對象到 Lua
有時候需要編寫一些 C++ 對象,然后導出給 Lua 使用。這里可以參考 lib/cocos2dx_extra/extra/luabinding 里的 *.tolua 文件,將 C/C++ 頭文件轉為 tolua++ 需要的文件,然后借助 quick 中附帶的腳本編譯成 luabinding 接口。
在 quick 項目的 wiki 中,也有其他相關的文檔可以參考。
集成第三方 SDK
quick 有一個附屬倉庫 quick-cocos2d-x-plugins,其中包含了一些 SDK 的接口文件。參考 sample/luajavabridge 示例和這些接口文件,很容易就能完成 SDK 的集成。
后續 quick 也會提供更多的 SDK 接口,以及相應的示例代碼。
鏈接:- END -
項目地址:quick-cocos2d-x 項目 Wiki: wiki
那 quick 與 cocos2d-x 相比到底有什么區別,又有什么加強呢?這篇文章就是答案:
為什么會有 quick
quick 和 cocos2d-x 的差別
quick 由哪些部分組成
應該選擇 Lua 還是 JavaScript
怎么入門 quick
為什么會有 quick
cocos2d-x 是一個用 C++ 開發的游戲引擎,其架構設計和 API 基本上是照搬的 cocos2d-iphone(一個用 Objective-C 的 iOS 游戲開發引擎)。
由于 C++ 對開發人員要求較高,所以網龍科技利用 tolua++ 這個工具,將 cocos2d-x 的 C++ 接口轉為了 Lua 接口(這種將 C++ 接口導出為 Lua 接口的庫通常稱為 luabinding)。讓開發者可以使用 Lua 這種簡單易懂的腳本語言來編寫游戲,從而大大提高開發效率。
大概在 2012 年上半年,我們公司開始使用 cocos2d-x + Lua 來開發游戲。但是發現當時 cocos2d-x 對 Lua 的支持還存在相當多不完善的地方。所以我重寫了整個 luabinding 的支持代碼,解決了內存泄露、只能使用全局函數做回調等問題。
在 cocos2d-x 2.0 發布后,luabinding 又進行了不少改進和完善。截止到 cocos2d-x 2.1.4,整個 luabinding 已經可以說是相當穩定了。所以《我是 MT》、《大掌門》這些賺錢像印錢的游戲,就紛紛采用 cocos2d-x + Lua 的解決方案了。
可惜 cocos2d-x 團隊從 2012 年以來一直在強力推廣 cocos2d-x 的 JavaScript 解決方案,所以在 Lua 支持上基本上就沒有什么大動作了。而從我們使用 Lua 解決方案的開發商看來,需要 luabinding 具備更強大的功能,因此這就是我們開發 quick 的最初原因。
quick 的目標:
降低學習曲線
提高易用性
創建一個精簡、但更容易擴展的架構
quick 和 cocos2d-x 的差別
雖然 cocos2d-x luabinding 已經很完善了,但是要開發一個游戲,我們還需要做許多基礎工作。
將 luabinding 導出的 C++ 接口重新封裝成 Lua 風格的接口是最基本的工作。重新封裝后的接口應該更容易學習和使用,并且一些 C++ 和 Lua 之間數據格式轉換也應該隱藏起來。而這就是 quick 里首先實現的目標。
看看下面的代碼:
-- 載入 Sprite Sheet
local frameCache = CCSpriteFrameCache:sharedSpriteFrameCache()
frameCache:addSpriteFramesWithFile("Sprites.plist", "Sprites.png")
-- 構造一個幀動畫序列 Run0001.png -> Run0010.png
local frames = CCArray:create()
for index = 1, 10 do
? ? local frameName = string.format("Run%04d.png", index)
? ? local frame = frameCache:spriteFrameByName(frameName)
? ? frames:addObject(frame)
end
-- 創建 CCSprite 對象
local firstFrame = tolua.cast(frames:objectAtIndex(0), "CCSpriteFrame")
local sprite = CCSprite:createWithSpriteFrame(firstFrame)
-- 在 CCSprite 之上播放動畫(用 0.5 秒播放完 10 幀)
local animation = CCAnimation:createWithSpriteFrames(frames, 0.5 / 10)
sprite:runAction(CCRepeatForever:create(CCAnimate:create(animation)))
這段代碼的功能在游戲中會反復出現,所以通常會封裝成幾個簡單的函數。而 quick 里封裝后的接口要完成同樣功能會使用如下代碼:
display.addSpriteFramesWithFile("Sprites.plist", "Sprites.png")
local frames = display.newFrames("Run%04d.png", 1, 10)
local sprite = display.newSpriteWithFrame(frames[1])
local animation = display.newAnimation(frames, 0.5 / 10)
sprite:playAnimationForever(animation)
通過這個對比,可以看出二次封裝是多么必要。而 quick 提供了一個 Lua Framework,封裝了大量最常用的接口。
cocos2d-x 是一個功能完善的游戲引擎,但對于一個能掙錢的游戲來說,cocos2d-x 還缺少很多必須的功能。所以 quick 在 cocos2d-x 基礎上添加了更多游戲必須的功能,例如完善的 HTTP 和 Socket 網絡功能、數據加密解密、設備功能訪問等等。
游戲的玩法做得差不多了,就需要開始集成付費充值、統計、社會化分享、好友鏈等各種第三方 SDK。
在 iOS 和 Android 平臺上做這些工作,傳統做法是分別編寫 Objective-C 和 Java 的接口代碼,然后再用 C++ 中轉,借助 tolua++ 導出給 Lua 使用。這種做法不但繁瑣,而且像 Java 和 C++ 的交互存在相當多的困難,所以開發效率極低。
quick 針對這個問題,特別開發了 LuaObjectiveCBridge 和 LuaJavaBridge 兩個模塊。利用這兩個模塊,我們在接入 SDK 時,就不再需要 C++ 中轉層,也不需要 tolua++,由此省下的工作量相當驚人。
而且 quick 的附屬項目會提供大量現成的 SDK 封裝,進一步提高開發效率,讓開發商把主要的資源花在游戲玩法上。
在開發過程中,需要不斷測試。而 cocos2d-x 自帶的 Windows 和 Mac 模擬器功能太簡單。quick 特別開發了功能完備的模擬器,讓整個游戲在開發階段的大部分時間里都不需要借助真機就可以進行(小伙伴們都知道,Android 真機調試那么是多么的蛋疼)。
看看 quick 華麗的模擬器吧 :)
除了上述內容,quick 里還包含了物理引擎 Chipmunk 2D 的 Lua 封裝(相信我,你不可能找到比這個更容易使用的物理引擎接口)、骨骼動畫播放(支持 DragonBones、CocoStudio)、高性能的 LuaJIT 虛擬機等等。
總結而言,quick 和 cocos2d-x 的主要區別有如下幾點:
更完善的 Lua 支持,包括一個 Lua 框架對 C++ 接口進行了二次封裝
補充了大量 cocos2d-x 沒有提供,但游戲需要的功能
為提高開發效率,提供了 Objective-C 和 Java 的橋接模塊,以及強化的 Windows/Mac 模擬器
除了這些重大區別外,quick 還在細節上做了一些調整和完善。并且后續還會將來自 cocos2d-x 最新開發分支(devel 3.0)的一些重要 bugfix 和有價值的新功能移植到 quick 中。
當然,當 cocos2d-x 3.0 完全穩定下來的時候,quick 也會做相應的升級。
quick 由哪些部分組成
quick 由幾個主要部分組成:
cocos2d-x:目前基于 cocos2d-x 2.1.4 版本
tolua++:用于將 C++ 接口導出給 Lua 腳本使用
LuaJIT:最快的 Lua 虛擬機
cocos2d-x-extra:擴展功能,包括數據加密編碼、網絡傳輸、設備功能訪問等
Chipmunk 2D:物理引擎,以及相應的 cocos2d-x 和 Lua 封裝接口
CSArmature:一個骨骼動畫播放庫,支持 DragonBones 和 CocoStudio 創建的骨骼動畫
除此之外,還包含一些 Lua 的擴展:
lua_extensions:一些必備的 Lua 模塊,包括 JSON、ZLib、LuaFileSystem、LuaSocket 等
LuaJavaBridge:簡單的 Lua - Java 交互接口,簡化 SDK 集成
LuaObjectiveCBridge:簡單的 Lua - Objective-C 交互接口
應該選擇 Lua 還是 JavaScript
目前 cocos2d-x 支持兩種腳本語言的 binding,從我個人了解,各自的情況列表如下:
Features Lua? ?JavaScript
完全訪問 cocos2d-x API ? YES YES
iOS 平臺 YES YES
Android 平臺 YES YES
Windows 平臺 YES YES
Mac 平臺 YES YES
Linux 平臺 YES* YES
HTML5 平臺 NO YES
JIT 支持 YES YES
編譯為字節碼 YES YES
字節碼是否可以反編譯 NO NO
運行性能 HIGH LOW
接入 SDK 工作量 簡單 復雜,通過 C++ 中轉
導出自定義 C++ 類 簡單 復雜
而我最看重其中幾點:
運行效率:LuaJIT 編譯的字節碼在 JIT 可用時,運行效率可以接近 C 的程度。而在 iOS 這種不支持 JIT 的環境里,Lua 的運行效率比 JavaScript 高很多()。
是否容易擴展:Lua 從設計時就是作為嵌入式語言來設計的,所以需要將某個 C/C++ 接口導出給 Lua 使用,那是相當輕松的事情。
源代碼保護:LuaJIT 編譯的字節碼目前是無法反編譯的,因為 LuaJIT 在編譯時不是 1:1 直接轉換源代碼,而是對源代碼做了相當多的深入優化。LuaJIT 編譯出的字節碼體積是 Lua 編譯字節碼的三分之一,由此可見優化程度。
客觀的說,JavaScript binding 最大的優勢是以前大量的 JS 前端開發人員可以很容易的上手,而且支持 HTML5 平臺。但如果從手游體驗來說,Lua 的運行效率是很重要的優勢。
怎么入門 quick
東西再好,學不會也是白搭,所以這篇文章的重點是這個部分,前面都是廣告 :)
學習 Lua
Lua 是一種簡單易用的語言。學習這種語言最好的方式就是花幾天時間寫代碼,然后在命令行中運行。
重點:
table 在 Lua 中是一種萬能數據結構,既可以表示數組,又可以表示名值對。這和 PHP 里的 array 一樣。唯一的區別在于 table 用作數組時,第一個元素的下標是從 1 開始。
function 在 Lua 里是 first-class 類型,也就是說你可以把一個 function 當做普通值,傳遞來傳遞去,這和其他函數式編程語言是一樣的,例如 JavaScript。
Lua 里用 table 配合 metatable 實現面向對象。由于 C++ 對象導出到 Lua 里后就是這樣的機制,所以這個一定要搞明白。
搞清楚在定義方法和調用方法的時候,用“.”和“:”的區別。
嘗試修改和完善 quick 的各個示例程序
用 quick-x-player(quick 里牛叉的模擬器)運行 sample 目錄里的各個例子,無差別爆改。改一點就按 F5(Mac 上按 CMD+R)刷新模擬器看看效果(做過 Web 前端的童鞋感動吧),要不了幾天就成熟練工了。
最常遇到的問題:
這個方法返回了一個什么對象?
因為 quick 里對 C++ 接口進行了二次封裝,所以一些框架的方法返回的對象不一定很明確。但大多數可以從方法名上推測出來:
display.newSprite() 創建 CCSprite 對象
display.newFrames() 創建包含多個 CCSpriteFrame 對象的數組
ui.newImageMenuItem() 創建 CCImgeMenuItem 對象
ui.newMenu() 創建 CCMenu 對象
實在看不出來,那就去 framework 目錄里翻源代碼吧。
這個方法是干嘛的?
首先,從 framework 里找。找不到就去 cocos2d-x 里找。還找不到,那就是 cocos2d-x-extra 或者第三方庫提供的方法。這里強烈推薦 Sublime Text 這個超神的編輯器,全文檢索神馬的完全不在話下。
為什么代碼沒有預期的效果?
不管是 Lua 還是 quick,當前的版本都非常非常穩定。所以遇到這種情況,不要首先懷疑語言特征或者引擎,而是多做測試,看看問題到底是怎么發生的。
在哪里尋求幫助?
目前 quick 還沒有專門的社區,所以如果你想尋求幫助,最快捷的途徑就是 QQ 群:284148017 。當然,不會有誰成天沒事兒在那里義務解答,所以 QQ 群更多是交流經驗的地方。未來,quick 會建立自己的社區,方便大家的交流。
熟悉 cocos2d-x API
本質上,quick 是 cocos2d-x 的一個增強版本,所以熟悉 cocos2d-x API 是基本要求。好在 cocos2d-x 目前已經有相當豐富的學習資料,即便是 C++ 代碼的,改寫為 Lua 也非常簡單,也就語法的區別而已。
這個階段可以用 quick 里的 CoinFlip 示例為基礎,添加更多玩法或功能。CoinFlip 已經具備一個完整游戲的雛形,所以能夠在 CoinFlip 中自在添加功能時,也就達到可以獨立開發游戲的程度了。
學習使用擴展功能和第三方 Lua 擴展
quick 里包含了相當豐富的擴展庫,從支付到網絡服務都應有盡有。而這些功能也是游戲從項目變成產品時必須的,所以在熟練掌握擴展功能可以大大提高開發效率,避免重復勞動。
在學習擴展功能時,要了解這個擴展功能是基于什么開源項目來開發的,這樣才能找到有針對性的學習資源。例如 LuaSocket、LuaFileSystem 等 Lua 擴展、Chipmunk 2D 物理引擎等等,它們的用法在各自項目的網站上都能找到。
導出自己的 C++ 對象到 Lua
有時候需要編寫一些 C++ 對象,然后導出給 Lua 使用。這里可以參考 lib/cocos2dx_extra/extra/luabinding 里的 *.tolua 文件,將 C/C++ 頭文件轉為 tolua++ 需要的文件,然后借助 quick 中附帶的腳本編譯成 luabinding 接口。
在 quick 項目的 wiki 中,也有其他相關的文檔可以參考。
集成第三方 SDK
quick 有一個附屬倉庫 quick-cocos2d-x-plugins,其中包含了一些 SDK 的接口文件。參考 sample/luajavabridge 示例和這些接口文件,很容易就能完成 SDK 的集成。
后續 quick 也會提供更多的 SDK 接口,以及相應的示例代碼。
鏈接:- END -
總結
以上是生活随笔為你收集整理的Quick-cocos2d-x 与COCOS2DX 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTMP推流H.264
- 下一篇: linux下samba服务器无法访问,解