我的北京游戏开发总结【三】
大家好,我是Syc,多謝大家一直以來對VC驛站的支持!
? ?? ???書歸正傳,以上兩篇文章就是個人對于該款游戲框架方面的一些簡單分析,此外還有一些比較重點的經驗性總結給vc驛站-www.cctry.com的網友羅列出來,撈點干的東西給大家壓軸。當然這些東西也不都是我這次去北京學習之后才了解到的,以前也都會注意這些問題,但是我這次去北京做項目深深的體會到了這些技術點的重要性,因為都在項目中有充分的體現:
? ?? ???1、內存方面的問題一定注意,同時要及早發現,及早解決。大家平時在寫代碼的時候就應該多注意內存的問題,溢出、泄露之類的,還有一個是效率問題。本身移動設備上受硬件條件的限制,不同于pc,所以內存不能無限制的去用,另外,iOS與 Android 的系統中的程序都是運行在沙盒模式下,一旦您的程序內存超標系統就會直接Kill掉你,所以如果大家的程序資源比較多,不要在程序啟動的時候就一下子全都載入,這樣比較浪費,也怕內存吃不消。不過有人會說那我用到一個載入一個,不用的時候就釋放總該行了吧?但完全這樣做也不能說永遠是正確的,這就是我說的要考慮內存效率的問題,一些類似數字顯示的數字圖片資源,比如:游戲分數、游戲消耗時間、游戲剩余時間等等,在你的程序中會很經常的用到,你同樣是用的時候載入不用的時候釋放,這樣資源來回進行內存的切換會耗費更多的時間,效率受影響,所以類似這樣的數字資源可以在程序啟動的時候載入,程序退出的時候再釋放了,畢竟占用的內存不大。
另外,Cocos2d-x本身在類似CCSprite這樣的類中都有提供Cache緩存機制,所以這個也是建議大家去使用的,可以提高效率,但是最好理解了他的原理之后再好好的去使用,不要一味的向Cache中添加東西,這樣即使內存中實際的資源是一份也是不行的,因為其引用計數是多個,所以在進行釋放的時候是不會完全釋放的。再一個,大家在做項目的過程中遇到問題了最好及時解決不要等到項目要結束的時候再一起查內存方面的問題。我們這個項目就遇到了這么一個情況,最后才查內存的問題,但是發現真要是想改起來的話改動會比較大,但是項目周期馬上要結束了,所以時間上來不及,最后還是通過其他的方式來解決的;
// 備注:本篇文章來自 vc驛站:http://www.cctry.com
// C、C++、VC++ 各種學習資源,免費教程,期待您的加入!
/
? ?? ???2、代碼注釋方面要多寫、勤寫,大家有的可能平時自己寫程序的時候不經常寫注釋,沒這個習慣,包括我在內也一樣。但是當多個人一起合作開發一個比較大的項目,代碼量慢慢增加的時候你就會發現平時寫注釋的好處了,有時候自己前期寫的代碼到后期都得好好想一會才能理清思路,后期還有可能是你去改動別人寫的代碼,所以這個時候如果對方代碼一點注釋都沒有,你敢上去就修改嗎?肯定不敢,必須先讀懂對方這塊代碼的實現流程,弄懂了之后才能進行流程的修改以及Bug的修復;
? ?? ???3、善于使用assert、log輸出之類的調試手段,隨著代碼量的增加,雖然你的代碼有注釋,但還是不夠的,可能程序某一塊的功能異常,雖然你加上了些 if-else 的判斷,但是程序沒有斷住,所以異常信息捕獲不到,這個時候你就要去Debug查找,肯定會花費一定的時間。使用assert就不同了,程序會直接類似斷點一樣的斷住,可以節省不少時間的;
? ?? ???4、程序的可擴展性要注意,當然這里面的可擴展性我不僅僅是指宏觀上面的程序架構,微觀到程序上的某一個機能也是要注意的。如果可以封裝成某個函數或類盡量把相關機能封裝起來,這樣也方便其他模塊去調用,同時對于后期的程序處理方面也是非常易于修改和移植的。否則很多機能都寫在一起,如果后期要進行流程的修改可能不太容易,改動會比較大。在這個項目中就深深的有體會,前期的開發人員將所有的兩個場景切換中間都加了個進度條的中間場景,同時在這個中間場景中進行了些下一個場景的資源前置加載等工作,場景之前的關聯性比較大,但是后期策劃案有調整:戰斗結束之后切換到結算場景時不需要這個中間的過渡場景,因為前期模塊化做的不是很好,所以我們后期的修改工作就麻煩多了……
? ?? ???5、程序開發人員與美術人員之間的協調工作要做好,畢竟大家都是在合作一個項目,所以,如果一個功能直接讓美術人員做幅圖片比讓程序人員用代碼開發省時省力的多,那么何樂而不為呢?比如,要對一幅彩色圖片進行灰化處理,用程序來實現也是可以的,不過得弄懂這個圖片處理算法,之后才能實現,但如果讓美術人員用ps來對這個圖片做處理的話可能2分鐘就搞定了……
// 備注:本篇文章來自 vc驛站:http://www.cctry.com
// C、C++、VC++ 各種學習資源,免費教程,期待您的加入!
/
? ?? ???6、別人的代碼也不是完美無錯的,包括Coco2d-x的也一樣,本身Coco2d-x現階段來說也是個半成品。另外,對于Coco2d-x這樣的跨平臺東東,在一個平臺下沒問題,不一定在另外的平臺下就沒問題。之前做了個文字滾動的功能,發現在Win32平臺下CCLabelTTF組件并沒有像其文檔上說明的那樣正常的實現了相關的功能,而是有偏差,所以我們修改了Coco2d-x引擎中Win32部分的實現代碼,修復了其Bug,當然這個功能在iOS平臺下是正常的;
? ?? ???7、再說一個封裝移植的技巧吧,也是從北京某大牛那學的:C是C++和Objective-C的中間橋梁!之前做了一個IAP(In App Purchases)程序內付費這么一個東西,主要是針對iOS平臺的,所以蘋果提供了底層的實現,不過是基于Objective-C語言的,我們的游戲是用C++編寫,所以就要對IAP部分的底層Objective-C實現進行封裝,供C++去調用。剛開始確實沒什么思路,后來看了相關代碼之后理解了,可以通過C語言在中間中轉一下,畢竟Objective-C和C++都可以無縫和C語言進行互調,所以C語言就在中間起了一個Bridge的作用;
? ?? ???8、要實現一個相對獨立的新機能時,可以先在一個小工程或者小demo中去試做,如果成功的實現了再移植到自己的程序項目中,這樣可以避免一些其他方面干擾的問題。這個游戲項目使用的數據庫是SQLite3,可以直接使用任意一款SQLite數據庫查看工具查看和修改其存放的數據,為了安全起見,不讓用戶隨便修改游戲配置及獎勵信息,所以我們要對數據庫進行加密,這里使用的是WxSQLite,但是得重新下載編譯SQLite3和WxSQLite的代碼,中途也遇到了不少問題,當時我就不確定是我們工程的問題,還是各種庫弄到一起沖突了,外在因素比較多。所以這個時候我就新建了個小工程進行測試,最后完美的解決了……然后再合成到我們的游戲項目的工程中,這樣還是非常不錯的!
? ?? ???9、要考慮到多平臺對應的可移植性問題,避免類似“%2s”的指定寬度格式化字符串問題發生,事實證明Windows平臺下驗證的比較寬松,會忽略“%2s”中的‘2’,因為根本就不支持,只有“%s”,所以會得到格式化后的結果字符串,而在iOS平臺下就比較嚴謹,既然不支持這種格式化字符串就直接返回一個空串,所以兩個平臺下的返回結果就不一樣了,Windows平臺下正常,iOS平臺下就產生了問題;
// 備注:本篇文章來自 vc驛站:http://www.cctry.com
// C、C++、VC++ 各種學習資源,免費教程,期待您的加入!
/
? ?? ???10、游戲的設計應該從玩家的角度去考慮,從玩家的角度去看待問題以及解決問題,另外關卡設計等的從易到難,這個難并不是我們要刻意的去難為玩家,而是要讓玩家在玩游戲的過程中有種爽與過癮的感覺,這樣才能增加游戲的可玩性,吸引住玩家!
? ?? ???好了,總算是寫完了,這三個月來總結的東東就先跟vc驛站-www.cctry.com的網友分享到這里,以后再有好的東西還會給大家寫的,最后還是希望大家一如既往的支持vc驛站-www.cctry.com,謝謝大家!
轉載于:https://www.cnblogs.com/cctry/p/3783099.html
總結
以上是生活随笔為你收集整理的我的北京游戏开发总结【三】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SaltStack 学习笔记 - 第六篇
- 下一篇: 浅谈MD5加密算法中的加盐值(SALT)