今天說一下手機遊戲開發的調試問題吧。不得不說的是和PC平台遊戲、軟體開發相比,手機上開發遊戲和軟體要困難的多。原因是多方面的,比如說開發環境比較複雜,工具軟體不夠人性化等等。
cocos2dx的出現解決了一個很大的問題,因為他是跨平台的,相對來說windows的軟體開發環境比較友好,對中國程式員來說更熟悉。這樣可以在windows進行日常開發和調試,然後在發布到其它平台的時候進行少量的處理就好了。
cocos2dx程式的調試,在windows下和端遊類似,可以在後台視窗進行列印,也可以直接在vs中掛斷點進行跟蹤。相對還是比較容易。唯一需要最佳化的是把後台列印日誌匯出,以方便根據日誌進行分析。
但是在windows環境OK之後,需要發布到Android平台的時候,就有些麻煩了,順利運行還好,一旦在啟動並執行過程中出現問題,那再來調試就相當的麻煩了,模擬器滿如蝸牛,Esclipe本身支援也不夠強大。有時候可能只是一句指令碼報錯,但是要發現問題缺要費九牛二虎之力。要是在真機上運行出錯,那就更加不好跟蹤問題了,還需要用到USB調試功能。今天的主要話題就是針對這種情況,提供幾個好的方法來方便我們進行遊戲開發。
1、後台列印日誌的最佳化。
windows下已經有後台日誌查看功能,但是大家可能會發現一個問題,後台顯示有行數的限制,超過多少行之後就看不到了,但是cocos2dx的輸出是相當多的。怎麼辦?解決方案就是輸出log檔案。把後台顯示的內容輸出後,我們可以直接分析log檔案。下面提供lua的解決代碼,用C++的同學可以自己改造。
首先,封裝一下lua的檔案處理功能,比較簡單,而且後面的方法可能也需要使用。
--file.lua--定義lua檔案操作的方法--開啟檔案:參數(檔案名稱,開啟模式),返迴文件控制代碼或nilfunction openFile(filename, mode)local f = io.open(filename,mode)if f thenreturn felsereturn nilendend--讀取檔案全部內容:參數(檔案控制代碼),返回一個stringfunction readAllFile(f)return f:read("*all")end--讀取檔案一行內容:參數(檔案控制代碼),返回一個stringfunction readLineFile(f)return f:read("*line")end--寫檔案內容:參數(檔案控制代碼,字串)function writeFile(f, ...)local arg = {...}f:write(unpack(arg))end--關閉檔案,參數(檔案控制代碼()function closeFile(f)f:close()end 然後,我們要改寫print函數和cclog函數,將這些內容輸出到檔案。
local print_raw = print-- printprint = function(...) require "base.file" print_raw(string.format(...)) local file = openFile("client.log", "a") if file thenwriteFile(file, string.format(...).."\n")closeFile(file) endend-- cclogcclog = function(...) print(string.format(...))end-- for CCLuaEngine tracebackfunction __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg) .. "\n") print(debug.traceback()) print("----------------------------------------")end 這樣,所有在lua裡面的列印資訊都會輸出到記錄檔方便我們分析了。
2、上面這個方法已經能夠讓我們分享日誌,那還有沒有更好的方法呢?如果我是在安卓手機上運行,我要查看日誌是不是很不方便呢?
那我們就更進一步,我們不是把日誌輸出到檔案了嗎?那我們直接在遊戲裡面查看日誌不是更方便?所以我們的思路是,在遊戲中寫一個日誌顯示介面,然後把記錄檔內容一行一行讀出來,讓他顯示在一個RichText控制項裡面。這樣是不是更方便呢?這個方法我暫時沒時間寫,不過肯定沒問題的,有時間寫好後補上代碼。
3、方法2已經能夠及時的看到日誌了,我們還可以使用更強大一點的方法,我們可以建一個Log Service器,用戶端在輸出日誌的時候就發送到Log Service器,這樣真機測試就很方便了,和在windows開發很相似了,不過這個方案有點重了,大家使用第二點應該就可以了。
好了,上面推薦的這三種方案應該能夠解決大部分的調試問題了,再也不用為了看日誌去啟動麻煩的模擬器了。
轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog)