使用lua開發有乙個很爽的地方就是可以從控制台實時輸入lua指令來進行除錯,但是之前該方法僅在windows下有效,之前也介紹過,見這裡。研究了下發現cocos2d-x是有乙個console類來支援遠端除錯的,哈哈,從此真機除錯也可以很方便了。
這裡先介紹下console的關鍵api先:
listenontcp(number) 這裡引數是監聽的埠號
addcommand(tb, funciton) 這裡第乙個引數是乙個表,內容如下:,第二個引數就是執行的函式了,傳入引數為(控制代碼,字串引數)
在這裡我將其封裝到了cocos-lua裡,函式如下:
function gamemgr:enablelistenontcp(port_number)
return
cc.director:getinstance():getconsole():listenontcp(port_number)
end
function gamemgr:addconsolecommand(name, help, call_back)
return
cc.director:getinstance():getconsole():addcommand(, call_back)
end
建立監聽過程如下:
1. 程式初始化時,呼叫api監聽指定埠號,這裡我們假設用埠號1234
function gamemgr:_init()
...
self:enablelistenontcp(1234)
...
end
2. 建立自己的lua指令,這裡我們只需要能接收我們輸入的lua指令並執行就好。(cocos-lua的框架已整合)
function insertconsolecmd(cmd_string)
wait_execute_cmd_string = cmd_string
end
function gamemgr:init()
...
local function executecmd(handler, cmd_string)
insertconsolecmd(cmd_string)
end
self:addconsolecommand(
"lua"
,
"execute a lua command string."
, executecmd)
...
end
3. 在遊戲主迴圈中查詢並執行指令
local function executecmdstring(cmd_string)
if
cmd_string then
local cmd_func = loadstring(cmd_string)
if
cmd_func then
xpcall(cmd_func, __g__trackback__)
else
cclog(
"invalid cmd! %s"
, cmd_string)
end
end
end
local function mainloop(delta)
...
if
wait_execute_cmd_string then
executecmdstring(wait_execute_cmd_string)
wait_execute_cmd_string = nil
end
...
end
nc 裝置ip位址 埠號
連線成功後,可以輸入help,看到可用的指令,如fps on/off, debugmsg on/off等等,這裡我們先開啟控制台輸出
debugmsg on
輸入剛才我們建立的指令:
lua print(
"hello world"
)
命令台上會出現「hello world」。
哈哈,大功告成,以後真機除錯更方便啦~~^_^
ps:以上功能均已整合到了cocos-lua中,只要初始化時監聽自定義的埠就ok啦~~
參考文章:
cocos2d x 使用UIWebView載入網頁
前段時間專案中要微博授權登陸,使用的是web登陸方式。所以要在cocos2d x中顯示網頁。所以就將uiwebview用進來了。實現 fmuiwebviewbridge.h import import import import fmlayerwebview.h inte ce fmuiwebvie...
cocos2d x 使用UIWebView載入網頁
前段時間專案中要微博授權登陸,使用的是web登陸方式。所以要在cocos2d x中顯示網頁。所以就將uiwebview用進來了。實現 fmuiwebviewbridge.h import import import import fmlayerwebview.h inte ce fmuiwebvie...
cocos2d x中精靈的使用
精靈是2d遊戲中得主角,這次就總結一下cocos2d x中精靈的使用。一,載入 首先,建立乙個變數 ccsprite psprite 載入函式分為兩組initwith x和spritewith x,其主要的區別是使用initwith x的手工作業,而spritewith x是純自動化作業。在spri...