1. 程式人生 > >Cocos2d-X LUA 入門踩坑之小遊戲

Cocos2d-X LUA 入門踩坑之小遊戲

作為一個剛剛入門的新人,接觸cocos2d-x也就半個多月,在這裡純屬個人看法以及踩過的一些坑,大神勿噴!
剛開始接觸cocos2d-x的時候,在官網下載cocos2d-x最新版,發現與所學教程的版本不太一樣,跟著舊版本quick做出來的東西在新版本下根本跑不動,對於舊版本例如quick3.5是已經不再維護了,剛開始跟著視訊教程學,真心因為版本的問題快學不下去了,然後看一些cocos2d-x的書籍,雖然明白它是基於c++開發的,看書的時候也只能是大概瞭解引擎框架裡的東西,用法啥的都是靠網上搜索才逐漸明白,但是這卻耗費了大量時間,不斷地在修復bug。在下載版本的時候建議初學者的可以先下載3.7版本的,裡面生成的例子是一款消滅bug的小遊戲,對於入門的人來講還是有很值得借鑑的地方,還可以學習一下mvc框架。
這裡寫圖片描述


本人最開始著手做的是一款打飛機的遊戲,對於新手的建議是,即便是介面可以藉助cocos studio來做,但是最開始還是手動用程式碼搭建介面吧,有利於熟悉cocos2d-x。
接下來就講講踩過那些坑吧
一、 記得在建立一個飛機精靈的時候把他新增到layer節點上的時候,執行的時候在場景中一直顯示不了,其實剛開始不會的時候是在網上搜的,看別人用法是這樣,所以感到也很奇怪,最後找到原因是layer沒有作為結點新增進場景裡。這種屬於小問題,估計也是隻有入門的人才會被坑到了。
第一行建立應該為 local layer = cc.Layer:create().addTo(self)
這裡寫圖片描述
二、 觸控時間舊版本不適用的問題,建議新手在看到一些api的應用時候如果覺得不適用的話應該去官網看文件搜尋一下是否有這個方法,應該如何使用,不過對我來說官網的東西用法說得少,基本上看一下有沒有這個方法,然後還有看引數就自己琢磨了。
這裡寫圖片描述

三、 之前就因為在使用座標轉換的時候,也就是世界座標和相對座標,使用的函式引數其實是一個,然而我在引數中使用了getPosition(),其實這個方法獲取到的是兩個引數,那個時候沒理解好,其實cc.p()就可以作為一個引數傳遞進去了。
另外提醒一下新手,座標轉換不要隨意使用,之前因為把飛機新增到layer上,觸控移動的時候飛機座標沒有跟著變,才想著用世界座標,但是隨後發現其實沒理解好,無論是世界座標還是相對座標,都有一個參考點,而且世界座標有自己的計算方式,要理解好,才能知道如何正確使用
這裡寫圖片描述
四、 在程式碼中做迴圈遍歷的時候,因為lua中table如果romove掉一個數據的話,後面的資料位置會往前挪,導致遍歷的結果不理想,想要移除的物件並沒有移除掉,所以可以使用倒序遍歷的方法或者while遍歷
例如: 1.for ,i paris table do … (
為虛變數,就是不需要用到的變數) 2.while i=1,table do
五、 場景重置的時候,當前場景還會保留之前場景中的物件和事件,所以重置的時候應當使用迭代器將所有資料remove掉,以及清除監聽事件,並且定時器也要記得關閉掉,否則程序會一直持續
這裡寫圖片描述
六、 還有在迴圈過程中千萬不要改變控制變數的值,否則結果就是你遊戲執行多幾次,小小的遊戲就能卡哭人,後果太嚴重了,比如你開了個定時器,第一秒的時候遍歷十次,第二秒因為變數值的改變,如果是增加,那第二秒就是遍歷二十次,第三秒四次,然後一百次等等,結果是不可預知的
七、 提醒一下新手,lua畢竟和c++不一樣,在運行遊戲時候FPS左下角三行,如果想要去掉的話一定要在場景裡使用導演類去除,看了網上教程都是AppDelegate.cpp裡面做修改,那應該是c++工程的做法
去除FPS程式碼 cc.Director:getInstance():setDisplayStats(false)
這裡寫圖片描述
八、 專案打包的時候遇到的坑
在配置的時候幾樣東西要準備好,ndk,sdk,ant,jdk
在下載ndk版本的時候一定要看跟自己的cocos2d-x版本是適用的,不要盲目下載,還有路徑名字一定不能有空格,為了保證絕對不出錯,所有的路徑名也都最好用英文
這裡寫圖片描述
這裡寫圖片描述
九、 等我飛機小遊戲做好的時候,專案也打包完畢的時候,要在手機執行發現在電腦模擬器上游戲可以正常進行,當在手機進行一段時間後再載入csb檔案時候居然會出現閃退,那個時候內心是奔潰的,要知道我使用的工具是visual studio,打包編譯也是用的命令列,要找閃退的原因都沒有頭緒了,在別人建議下搭建了eclipse環境,通過連線真機跑專案列印logcat日誌才找出問題所在。新手們在搭建eclipse環境的時候也要小心了,最好能真機除錯,不要在eclipse上使用模擬器,分分鐘坑死人,還卡哭。記得在真機除錯的時候先打包編譯出現so檔案在進行下一步,現在打包andorid也不要去使用以前交叉編譯的舊方法了。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
十、 最後,很感謝在我遇到眾多問題的時候交流群的大神給我的幫助,學習程式設計這東西,在遇到bug又容易鑽牛角尖的時候,應該努力尋求的別人的幫助才能獲得更多思路。