1. 程式人生 > >從0開始使用Cocos2dx Lua過程記錄

從0開始使用Cocos2dx Lua過程記錄

從官網下載 cocos2dx 3.16版本

下載完成用notepad++開啟readme.md文件

按照說明執行setup.py,發現未安裝python,去python官網下載最新的python 2.7.14

安裝完成後再次執行setup.py,提示找不到python命名,於是將python安裝路徑新增到系統的環境變數中

再次執行setup.py,提示需要設定NDK_ROOT等其他android環境,因為暫時不編譯Android,直接回車忽略了

配置完成後開始建立專案,cocos new MyGame -p com.your_company.mygame -l cpp -d d:\lua_test

開始編譯Win32專案,在命令列執行 cocos run -p win32,提示沒有安裝Vs2013、Vs2015、Vs2017中的任意一個

去網路下載Vs2013的ISO檔案,下載完成後開始安裝

安裝過程中一直卡在“建立系統還原點”,百度查詢原因,開啟系統->系統保護,在配置中關閉所有保護,刪除所有已經建立的還原點,馬上就繼續安裝了

安裝到最後又一直卡在“ Visual Studio 2013 準備”狀態,斷開網路就結束了。【因此建議安裝過程中全程斷開網路】


繼續執行cocos run -p win32,等待一段時間後,就成功運行了

接下來需要找一個IDE,首先想到的是LuaStudio,官網下載後執行,居然註冊介面頻繁卡死,只好暫時作罷

又去下載了一個LDT(LuaDevelopmentTools),下載完畢後執行,提示需要JRE或JDK,遂下載之。

正常啟動LDT後,建立專案,然後開啟Lua檔案測試,發現不能補全程式碼,百度後未找到合適方案

再次在百度搜索,發現一個babelua的VS外掛,支援VS2012、VS2013、VS2015,準備下載研究,參見 http://blog.csdn.net/babestudio/article/details/27222141

過程中重啟電腦,發現LuaStudio又可以使用,繼續研究LuaStudio,發現LuaStudio可以只能提示,繼續測試


進入LuaStudio之後,提示需要用機器繫結註冊或帳號登入,果斷選擇帳號登入,進去後沒有提示註冊,但是看時間只能免費使用一天,先使用再說

新建一個LuaStudio工程,將cocos生成的模擬器檔案下的lua檔案(.\simulator\win32\src)全部匯入工程,開始測試

檢視cocos工程相關的程式碼,發現在工程內的函式基本能做到智慧提示,但是cocos的核心庫不能提示,這時可以通過“工具->Cocos2dx-api”,選擇一個版本即可

這裡的cocos2dx-api的提示,也僅僅是一個輔助作用,如果真正要檢視幫助,可以到 http://api.cocos.org/ 下檢視,右邊可以選擇語言(c++ js lua)


接下來要解決lua程式碼的除錯問題

lua在window下的除錯,可以直接開啟lua工程,如MyGame.sln(位置:frameworks\runtime-src\proj.win32),直接執行

lua程式碼中的print和printLog函式日誌都會在VS的輸入視窗內顯示,如果Lua指令碼出現錯誤,還會在日誌內有呼叫棧資訊


接下來開始解決UI編輯器的問題

經過百度查詢,編輯器只有cocosbuilder和cocostudio兩種,cocosbuilder已經很久之前的版本了,只有使用cocostudio

在網上查詢,可以找到最後釋出的cocostudio版本為3.10,當時支援的cocos2dx版本為3.10,由於3.16版本高於3.10,應該可以使用


接著要學習一下cocostudio的編輯相關內容

看一下cocostudio的介面操作, 參考一下 http://www.cnblogs.com/damowang/p/5179716.html

瞭解一下控制元件的類分別是什麼,類名是什麼(先百度看其他人講解,然後看cocos2dx原始碼),參考一下http://www.cnblogs.com/hewei2012/p/3456415.html

瞭解一下怎麼釋出資源,lua裡邊怎麼呼叫(包括介面和動畫)

瞭解lua下怎麼響應控制元件的事件,預設UIWidget的Touch事件是關閉的,需要呼叫setTouchEnabled開啟,然後呼叫addTouchEventListener監聽事件
local img = node:getChildByTag(21);
   local function onButtonTouch(sender, eventType)
     if eventType == ccui.TouchEventType.began then
     print(sender:getTag())
   end
end

img:setTouchEnabled(true)
img:addTouchEventListener(onButtonTouch)
注意ccui.TouchEventType.began定義在cocos.ui.GuiConstants中,需要require "cocos.ui.GuiConstants"

lua下檢視物件的類的名稱,可以列印xxx:getDescription(),根據顯示的資訊直接判斷,如果不清楚可以檢視cocos2dx原始碼

lua下定時器怎麼使用,一般使用 cc.Director:getInstance():getScheduler():scheduleScriptFunc(function(dt) end, inteval, false)

載入cocostudio生成的csb檔案
    mainscene中,使用MainScene.RESOURCE_FILENAME = "MainScene.csb"

    同時還可以使用MainScene.RESOURCE_BINDING來繫結控制元件的物件
    RESOURCE_BINDING的具體格式 MainScene.RESOURCE_BINDING = { ["XXX"] = {["varname"] = "YYY", ["events"] = {{["event"]="touch", ["method"]="onBtnTouch"}}}, }
    XXX是代表cocostudio中的變數名字,YYY程式碼lua中變數名字,然後在lua程式碼中可以使用self:YYY來訪問物件
    需要注意的是,仍然需要呼叫setTouchEnabled,如果為了方便可以修改ViewBase中程式碼,只要有事件的就預設開啟
    還有需要特別注意的是,繫結的物件僅支援CSB中直接子控制元件,子控制元件的子控制元件是無法繫結的


未完待續