1. 程式人生 > >cocos2d-x 遊戲開發新手細節問題

cocos2d-x 遊戲開發新手細節問題

這都是我自己在剛接cocos2d-x時有時會犯的錯誤,特寫下來記錄一筆。

一、音樂音效的播放

//新增SimpleaudioEngine.h
#include "SimpleAudioEngine/SimpleAudioEngine.h"

//播放背景音樂的程式碼
SimpleAudioEngine::getSharedEngine()->playBackgroundMusic("background-music-aac.mp3");

//播放音效的程式碼
SimpleAudioEngine::getSharedEngine()->playEffect("pew-pew-lei.wav");

蘋果自己音樂檔案的格式caf。cocos2d-x下的SimpleAudioEngine對mp3和wav這兩種大眾格式都支援。


二、場景類的初始化工作

       在objc的標頭檔案中,可以不宣告類成員函式,而直接在.m檔案裡實現。但是cpp不允許這樣做。所以coco2d-x裡面有一個init的方法。提供了累世的功能,所有繼承自CCNODE的都有init方法。

       我馬上想到了,既然父類都有了,我就可以直接從父類繼承下來,使用self強制轉化為指向自己的物件,這樣子類就不用自己實現了。

       實際上是不行的,cpp沒有self關鍵字。不能像OC那樣直接從父類繼承下來靠self關鍵字變成指向自己的物件。所以我們看到所有類都有一個node()方法,它集合了new,init,autorelease等方法,可以減少呼叫者的程式碼量。但是幾乎每次都是一樣的,所以我們可以使用cocos2d-x提供的一個巨集來實現。

       LAYER_NODE_FUNC和SCENE_NODE_FUNC。但是如果想使用這兩個巨集,就必須在派生類裡實現bool init()方法。

三、為什麼一定要在建構函式結束後呼叫init()

       主要是因為C++建構函式有個缺陷,就是沒有返回值。所以我們在C++建構函式異常時只能採取try-catch捕捉。而一般不推薦使用try-catch,主要是開啟try-catch支援會使編譯後的二進位制程式增加不少體積,(我發現android NDK好像也不支援try-catch)。

       cocos2d-x採取了現在比較流行的“二階段構造”的方法,即使用時先調建構函式,再呼叫init處理初始化邏輯。這種思路不論是在蘋果iOS的介面設計(比如[[NSString alloc] init],即二階段構造)、還是在samsung bada作業系統使用C++類時都是如此。

 
四、set/get方法

在cocos2dx\include\Cocos2dDefine.h中實現了一系列的巨集定義,可以自己看看。

比如有一個CCX_SYNTHESIZE_READONLY巨集,可以用來實現了只讀的類成員變數,也就是隻有get方法。

五、物件釋放


建議在CPP的類建構函式裡,對所有成員變數初始化,並在建構函式把釋放的物件指標初始化為NULL。
retain了一定記得release。對於xxxwithxxx初始化出來的物件,一般會autorelease。不需要自己release。

相關推薦

cocos2d-x 遊戲開發新手細節問題

這都是我自己在剛接cocos2d-x時有時會犯的錯誤,特寫下來記錄一筆。 一、音樂音效的播放 //新增SimpleaudioEngine.h #include "SimpleAudioEngine

quick-cocos2d-x遊戲開發【2】——項目結構分析、創建新場景

fileutil 遊戲 log world plain ack 設計 avi sca 創建完一個新項目之後,我們能夠簡單的看一看這個項目的文件組成,有這麽一個文件層次結構 幾個proj.*目錄就不用說了,是相應的平臺的解決方式,res專門存放我們的遊戲資源

cocos2d x遊戲開發系列教程 坦克大戰遊戲之子彈的碰撞檢測處理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d x遊戲開發系列教程 坦克大戰遊戲之虛擬手柄控制坦克移動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d x遊戲開發系列教程 中國象棋03 主介面

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d x遊戲開發系列教程 坦克大戰遊戲之坦克和地圖碰撞的檢測上

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d x遊戲開發系列教程 坦克大戰遊戲之敵方坦克AI的編寫

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d-x遊戲開發系列教程-中國象棋05-開始遊戲

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

cocos2d-x遊戲開發系列教程-中國象棋04-擺棋

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【iOS-cocos2d-X 遊戲開發之四】Cocos2dX建立Android NDK新專案並編譯匯入Eclipse中正常執行!

站文章均為 李華明Himi 原創,轉載務必在明顯處註明: 轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/android-game/645.html          ☞ 點選訂閱 ☜ 本部落格最新動態

Cocos2dX遊戲開發之CCTableView詳解(十一)(附原始碼)

本來很早就想寫關於CCTableView的文章,但是在基本功能實現之後呢,專案需求增加導致對這個控制元件的研究必須更加深入一點. 好的,現在開始介紹一下這個控制元件,在Cocos2d—X引擎中,這是一個仿製iOS裡面的NSTableView的一個控制元件。 S1,使用這個

Cocos2dX遊戲開發之CCScrollView(滑動檢視)(十三)

CCScrollView在Cocos2d-X引擎中主要使用在圖片尺寸遠大於螢幕尺寸的時候使用。 總體來說,使用起來比較簡單。 一個是CCScrollView控制元件本身,一個是CCScrollViewDelegate代理。 #1.現在我們先來看CCScrollView的主要

關於Cocos2d-x遊戲開發學習過程的一個總結

首先,關於Cocos2d-x專案的建立:    1.需要在Cocos2d-x的下載解壓目錄下建立工程(以下簡稱cc)  例如:D:\cocos2d-x-2.2.6,找到該檔案下的tools資料夾下的project-creator中的專案建立批處理檔案。工程名為專案名稱,自定義

cocos2d-x遊戲開發 跑酷(四) 關聯物理世界

前面一節雖然實現了一個跑動的人物,但是他僅僅只是一個精靈在執行一個跑動的幀動畫而已。這一節我要實現精靈和物理世界關聯,讓這個人跟實際的Parkour一樣,有實際體積,會碰撞。 一個精靈怎麼樣和一個

cocos2d-x遊戲開發 跑酷(九) 原始碼下載及小結

這個東西零零碎碎寫了一個禮拜吧。其實也沒多少東西在裡面。文章後附下載地址 因為我沒用過chipmunk,而且它是面向過程的東西,情感上又不太願意去研究,所以我用box2d來做了物理模擬。個人感覺bo

Cocos2D-x遊戲開發之十九:瓦塊地圖之碰撞檢測

昨天我們有了精靈和背景,並且精靈可以跑動了,但是我們不能讓精靈無窮無盡地跑下去吧,於是今天我們要在地圖上新增一些障礙物了; 首先開啟精靈的TMX地圖,然後我們自定義一個32X32畫素的圖片新增到圖層中,然後設定此圖層的屬性為:“collidable” 值為“true”,下一

【quick-cocos2d-x 遊戲開發】quick cocos2dx 3.2最穩定版 建立工程+sublime除錯執行

測試環境mac quick cocos2dx 3.2 quick cocos2dx 3.2版本已經差不多了 已經可以建立工程使用了,看下流程 1.最新版quick cocos2dx 3.2 建立工程,編譯,執行 1.1下載 按照README配置工程,執行player3

小小菜之Cocos2d-x遊戲開發旅程——Lua打包apk

Lua打包apk 這裡使用Cocos code ide 進行打包 , 後面會將在eclipse上的打包 第一步:環境配置。配置android-sdk,ant,ndk的路徑。 第二步:選中你的工程檔案,右鍵->Cocos工具->新增原生代碼支

Cocos2dX遊戲開發之 CCLabelTTF 標籤詳解和對齊方式設定(分數顯示)(十六)

在Cocos2d—X遊戲開發中,CCLabelTTF 和 CCSprite 大概是使用最多的2個類了。標籤主要用於顯示靜態文字,可以設定字型的大小和位置等屬性。 現在,我們先來看下CCLabelTTF 的基本原始碼。 S1,從下面的程式碼可以看到 CCLabelTTF 繼

cocos2d-x遊戲開發 跑酷(二) 物理世界

泰然的跑酷用的chipmunk物理引擎,我沒有仔細學過這個東西。不過我看了一下他們的用法,感覺跟box2d差不多。box2d用純真的面向物件C++開發,用在這裡應該沒有問題,試一下。 泰然的工程