cocos2dx開發遊戲,如果可以使用C++做出來,是不是不用lua,全用C++做更好呢?
01-06
如題,本人剛剛開始學習遊戲開發,有一定的C++基礎,但是對腳本語言的概念很模糊,不知道其存在的意義。
lua 最重要的特性對於商業項目來說,是終於有方法把遊戲邏輯變成文本資源了 ……
這意味著啥,熱更新啊親!C++將一些運行期的性能損耗移動到了開發期,腳本將一些開發期的性能損耗移動到了運行期。
兩者混用的目的就在於開發耗時和運行耗時中尋找一個平衡點。拿我現在維護的C++和python混用的遊戲來說,如果我改了一行C++代碼,我可能需要重新編譯整個工程,此間的時間足夠我泡個咖啡上個煎蛋,刷刷微博順便來知乎給輪子哥點贊。如果BUG沒有修復,我可能需要再改另一行代碼,然後重複這個循環。
於是一天過去了,我喝了十五杯咖啡,並成功地要到了隔壁策劃妹子的電話和QQ,但是我一個BUG都沒改好。如果我改了一行python代碼,reload一下,然後就能在終端上直接看結果了。於是一天過去了,我一直坐在電腦前,改了十幾個BUG。主管很欣賞我,然後又給了幾個BUG給我負責。如果需要添加一個什麼新的功能,我用C++寫,我得先構思好整個流程,那些類負責什麼功能,怎麼交互,同時還得關注內存分配泄露和類型匹配的問題,同時還得DEBUG。於是一天過去了,我又成功地要到了隔壁的隔壁的美術妹子的電話和QQ,但是功能的一半都沒做好。如果我用python添加功能,我得先構思好整個流程,然後那些類負責什麼功能,然後隨便寫啦,類型內存什麼的隨便用,不用管!直接測試不用編譯。於是一天過去了,我一直坐在電腦前,添加了好幾個功能。主管很欣賞我,決定要給予我「最優秀員工」稱號,並要在周會中點名表揚!然後又給了幾個功能需求給我。
如果熟悉C++,不熟悉Lua的話,用c++開發當然沒問半天啦?用Lua腳本編程主要是為了提高開發效率。但是記住,熟悉的語言的開發效率永遠是最高的,避免了使用不熟悉技術的很多彎路。
全用c++當然最好,但不是最快。
個人是遊戲原型用腳本,真正遊戲還是c++。這裡是對單機。網遊就是lua啦
正在做一個cocos2dX的手游項目。
作為遊戲編程,lua和c/c++有各自的優勢應用場景。大致來說:c/c++執行效率高,遊戲中一些性能敏感的複雜計算需要用c/c++來實現,防止遊戲卡頓和低幀率。這些複雜計算包括戰鬥邏輯,複雜AI,骨骼動畫蒙皮骨骼點的坐標計算等等。但c++是一種比較複雜的編程語言,開發效率較低。嘛,不過這不是主要問題,對於商業手游項目只用c++開發,是致命的。這一點在後邊lua具體說明。lua是腳本語言,執行效率不及c/c++,往往用來實現性能不敏感的遊戲邏輯,比如窗口界面等等。另外lua語法簡單,開發效率高,沒有編程背景的策劃花精力後也可以掌握,一部分商業端游項目的策劃是需要使用lua來實現一些簡單的窗口功能。
作為腳本語言,lua還有一個非常重要的特性:支持動態更新!完全用c/c++實現的發布在蘋果appstore上的手游項目,如果遇到bug,或者需要添加新的遊戲功能,需要提交遊戲包等待蘋果審核,需要等待一周甚至更多的時間。如果是緊急遊戲bug(在遊戲開發過程中要完全規避bug幾乎是不可能的),這一周的時間會造成非常巨大的損失。我自己在做的項目,每周都會進行一次內容更新,完全用c++開發的項目是無法做到的。另外lua的特性也可以做到諸如不停服的條件下完成伺服器端的代碼更新等等。所以,通常的手游項目的解決方案是,用c++來實現一些底層的,性能敏感並且不需要經常更新的模塊。用lua來實現需要經常更新的遊戲邏輯。如果你喜歡玩LOL,當其中一個英雄酒桶技能出現bug時,修改一下,用戶喜歡全部下載幾個g的客戶端還是僅僅更新下遊戲呢?
對於cocos,對於一般的遊戲項目,不要用純c++!!!
c++的json操作,比lua麻煩多了。c++jni通信,麻煩死了,找了下還沒有成熟的庫。lua的luaj,luaoc很成熟,還方便跨平台代碼復用。c++改界面,改一下編譯半天,煩死。
如果不熟悉c++和cocos,寫出來的cocos項目,結構屎一樣,ui操作一樣很可能卡成狗,結果又沒運行效率,又沒開發效率。商業項目還是用lua好,上線了可以更新代碼,用c++就得重新編譯打包 讓玩家下載了,發一次包也得審核幾天吧
論腳本語言的重要性
看熟悉哪一種語言吧!相對而言C++更加難駕馭,但是你駕馭好了一切都會很順利,而lua語法簡單,但是功能也是有限的。
題主沒有用過或者學過腳本語言吧,js、lua、python這樣的。腳本語言的靈活性非常之高,最典型的例子就是「鴨子類型」。而且腳本語言多數隱藏了很多高級特性,例如json在js中的操作,非常的方便。如果用c++來處理json代碼會比較複雜。不要覺得腳本語言是外行用的,腳本語言的編程模式同樣非常複雜,不過門檻比較低罷了。至於熱更新,僅僅一個小優勢而已,好的腳本項目代碼比同樣功能的靜態語言實現要精簡的多。
c++難度相對較大,尤其涉及諸如內存問題,很多人搞不定,所以不用。其次就開發效率而言,腳本更快,時間短、方便,所以現在很多人就lua或者js等腳本寫遊戲。當然看個人喜好了,都能寫的
強烈推薦用lua,如果不會那就去學啊。用C++不管開發,編譯還是更新都是一個痛苦的過程。
推薦閱讀:
※C++中this指針藏在哪裡?
※一個類有幾個this指針?如果只有一個,那是怎麼區分不同的對象呢?
※C++中的struct?
※如何快速入門UE4開發?
※關於 《C++ Primer 5th》,使用了「 =default 」的默認構造函數相關問題?