Cocos2d-x開源、跨平臺的遊戲引擎

from://http://blog.linguofeng.com/pages/language/c/Cocos2dx.html

 

Cocos2d-x

開源、跨平臺的遊戲引擎html


http://cocos2d-x.org/projects/cocos2d-x/wiki/Download
$ mkdir /path/to/cocos2d-x
$ mv cocos2d-2.0-rc2-x-2.0.1.zip /path/to/cocos2d-x
$ cd /path/to/cocos2d-x
$ unzip cocos2d-2.0-rc2-x-2.0.1.zip
$ subl ~/.bashrc
export COCOS2DX_ROOT=/path/to/cocos2d-x
export NDK_ROOT=/path/to/android-ndk-r8b    // 須要Android Ndk環境
$ cd $COCOS2DX_ROOT/HelloWorld/proj.android
$ chmod u+x build_native.sh
$ ./build_native.sh                            // 編譯庫
$ android update project -p . -t android-10    // 生成Ant須要的build.xml文件
$ ant debug install                            // 安裝到機器上

主要類介紹node

說明 做用 關係
CCDirector 導演(單例) 負責場景的切換以及場景的信息。如寬度,高度,旋轉場景內容。 包含多個 CCScene
CCScene 場景 場景包含有佈景,精靈,每場戲的不一樣,要切換場景。遊戲中可分爲主界面, 遊戲, 分數榜,結束界面等。 包含多個 CCLayer
CCLayer 佈景 相似是層的概念,也可來源於PS的層的概念。每一層都帶有衆多精靈等 包含多個 CCSprite
CCSprite 精靈 就是演員的,演員就須要加入到層裏面去的。有相應的動做。 包含多個 CCAction
CCAction 動做 精靈的動做。  
CCMenu 菜單    

場景的轉換android

CCScene* scene =CCScene::node();// 建立sceneCCLayer* layer =CCLayer::node();// 建立layer
scene->addChild(layer);// 添加layer到sceneCCScene* preScene =CCDirector::ShareDirector()->getRunningScene();// 獲取當前正在顯示的場景if(preScene ==null){// 若是當前沒有正在顯示的場景CCDirecotr::ShareDirector()->runWithScene(scene);// 顯示myScene場景}else{// 不然CCDirecotr::ShareDirector()->replaceScene(scene);// 替換成myScene場景}

常見宏bash

NS_CC_BEGIN
    // cocos2d命名空間開始
NS_CC_END
    // cocos2d命名空間結束
USING_NS_CC;// 聲明cocos2d命名空間
CC_SYNTHESIZE_READONLY(varType, varName, funName)// 聲明一個成員變量以及getfunName函數,沒有set函數。getfunName已經實現,其實現就是返回這個值。
CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName)// 相似CC_SYNTHESIZE_READONLY,不過getfunName返回的是引用。
CC_SYNTHESIZE(varType, varName, funName)// 聲明一個成員變量以及getfunName,setfunName函數.函數聲明和實現都有
CC_SYNTHESIZE_PASS_BY_REF(varType, varName, funName)// 相似CC_SYNTHESIZE,不過getfunName返回的是引用。
CC_PROPERTY_READONLY(varType, varName, funName)// 聲明一個成員變量以及getfunName函數,沒有set函數。getfunName函數的實現要本身作
CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName)// 相似CC_PROPERTY_READONLY,不過getfunName返回的是引用。getfunName函數的實現要本身作
CC_PROPERTY(varType, varName, funName)// 聲明一個成員變量以及getfunName,setfunName函數.函數實現要本身作
CC_PROPERTY_PASS_BY_REF(varType, varName, funName)// 相似CC_PROPERTY,,不過getfunName返回的是引用

4.1 動做

CCAction :動做,分爲瞬時動做 CCActionInstanse ,延時動做 CCActionInterval框架

動做 說明 構造 CCActionInterval 參數說明
CCMoveTo 移動到目標位置 CCMoveTo::actionWithDuration(2, ccp(100, 100)) 時間,位置
CCMoveBy 從目標位置移動 CCMoveBy::actionWithDuration(2, ccp(100, 100)) 時間,位置
CCScaleTo 縮放至多少倍 CCScaleTo::actionWithDuration(2, 0.5f) 時間,倍數(x、Y柚同時縮放)
CCScaleBy 放大至多少倍 CCScaleBy::actionWithDuration(2, 2f, 3f) 時間,x柚放大倍數,Y柚放大倍數
CCRotateTo 旋轉多少角度 CCRotateTo::actionWithDuration(2, 45f) 時間,角度(正數順時間,負數逆時針)
CCRotateBy 旋轉多少角度 CCRotateBy::actionWithDuration(2, 360f) 時間,角度(正數順時間,負數逆時針)
CCSkewTo 傾斜 CCSkewTo::actionWithDuration(2, 37.2f, -37.2f) 時間,X柚傾斜角度,Y柚傾斜角度
CCSkewBy 傾斜 CCSkewBy::actionWithDuration(2, 37.2f, -37.2f) 時間,X柚傾斜角度,Y柚傾斜角度
CCJumpTo 跳躍 CCJumpTo::actionWithDuration(2, ccp(300,300), 50, 4) 時間,目標座標,跳的高度,跳的次數
CCJumpBy 跳躍 CCJumpBy::actionWithDuration(2, ccp(300,300), 50, 4) 時間,目標座標,跳的高度,跳的次數
CCBezierTo 貝塞爾曲線運行 CCBezierTo::actionWithDuration(3, bezier) 時間,ccBezierConfig結構體
CCBezierBy 貝塞爾曲線運行 CCBezierBy::actionWithDuration(3, bezier) 時間,ccBezierConfig結構體
CCBlink CCBlink::actionWithDuration(2, 10) 時間,次數
CCFadeIn 淡入 CCFadeIn::actionWithDuration(1.0f) 時間
CCFadeOut 淡出 CCFadeOut::actionWithDuration(1.0f) 時間
CCTintTo 顏色變化 CCTintTo::actionWithDuration(2, 255, 0, 255) 時間,紅,綠,藍
CCTintBy 顏色變化 CCTintBy::actionWithDuration(2, 255, 0, 255) 時間,紅,綠,藍
CCAnimate 動畫 CCAnimate::actionWithDuration(3, animation, false) 時間,CCAnimation,是否恢復原始幀
動做組合方式 說明 構造 CCAction 參數
CCSequence 動做序列,有序地一個一個執行動做 CCSequence::actions(actionTo, actionToBack, NULL) 動做一、運做二、…、後面必須加NULL表示沒有了
CCRepeatForever 重複執行動做 CCRepeatForever::actionWithAction(actionTo) 動做
CCSpawn 同時執行動做 CCSpawn::actions(actionTo, actionToBack, NULL) 動做一、運做二、…、後面必須加NULL表示沒有了
動做回調 說明 構造 參數
CCCallFunc 不帶參數的回調 CCCallFunc::actionWithTarget(this, callfunc_selector(Class::callback1)) 當前動做,回調函數
CCCallFuncN 不帶參數但帶調用自己 CCCallFuncN::actionWithTarget(this, callfuncN_selector(Class::callback2)) 當前動做,回調函數
CCCallFuncND 帶參數的回調 CCCallFuncND::actionWithTarget(this, callfuncND_selector(Class::callback3), (void*)0xbebabeba) 當前動做,回調函數
CCSize size =CCDirector::sharedDirector()->getWinSize();// 獲取屏幕大小CCSprite* pSprite =CCSprite::spriteWithFile("HelloWorld.png");// 建立精靈CCActionInterval* actionTo =CCMoveTo::actionWithDuration(2,CCPointMake(size.width-40, size.height-40));
pSprite->runAction(actionTo);// 運行動做

4.2 菜單

CCMenu :菜單,參考: http://www.cocos2d-x.org/reference/native-cpp/d1/da0/classcocos2d_1_1_c_c_menu.htmlide

// 建立菜單ItemCCMenuItem* m1 =CCMenuItemFont::itemFromString("新遊戲",this, menu_selector(MainLayer::onNewGame));// menu_selector爲全局常量CCLabelBMFont* label =CCLabelBMFont::labelWithString("Enable AtlasItem","fonts/bitmapFontTest3.fnt");CCMenuItem* m2 =CCMenuItemLabel::itemWithLabel(label,this, menu_selector(MainLayer::onNewGame));// 經過Label建立ItemCCMenuItem* m3 =CCMenuItemAtlasFont// 經過CCSprite*spriteNormal   =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*2,115,23));CCSprite*spriteSelected =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*1,115,23));CCSprite*spriteDisabled =CCSprite::spriteWithFile("image.png",CCRectMake(0,23*0,115,23));CCMenuItem* m4 =CCMenuItemSprite::itemFromNormalSprite(spriteNormal, spriteSelected, spriteDisabled,this, 
                                                        menu_selector(MainLayer::onNewGame));CCMenuItem* m5 =CCMenuItemImage::itemFromNormalImage("image.png","imagep.png",this, menu_selector(MainLayer::onNewGame));CCMenuItem* m6 =CCMenuItemToggle::itemWithTarget(this, menu_selector(MainLayer::onNewGame),CCMenuItemFont::itemFromString("High"),CCMenuItemFont::itemFromString("Low"),...,
                                                        NULL);
m6->getSubItems()->addObject(CCMenuItemFont::itemFromString("33%"));
m6->setSelectedIndex(2);// 添加菜單Item到菜單中CCMenu* menu =CCMenu::menuWithItems(m1, m2, m3, m4, m5, m6, NULL);// 最後必須加NULLvoidMainLayer::onNewGame(CCObject* pSender){// 回調}

4.3 多層

CCLayerMultiplex :多個層,參考: http://www.cocos2d-x.org/reference/native-cpp/d3/d7e/classcocos2d_1_1_c_c_layer_multiplex.html函數

CCLayer* pLayer1 =newMenuLayer1();CCLayer* pLayer2 =newMenuLayer2();CCLayer* pLayer3 =newMenuLayer3();CCLayer* pLayer4 =newMenuLayer4();CCLayerMultiplex* layer =CCLayerMultiplex::layerWithLayers(pLayer1, pLayer2, pLayer3, pLayer4, NULL);
addChild(layer,0); 

pLayer1->release();
pLayer2->release();
pLayer3->release();
pLayer4->release();CCDirector::sharedDirector()->replaceScene(this);// 切換((CCLayerMultiplex*)m_pParent)->switchTo(0);

4.4 進度條

CCProgressTimer :進度條動畫

type 說明
kCCProgressTimerTypeRadialCCW 徑向逆時針旋轉
kCCProgressTimerTypeRadialCW 徑向順時針旋轉
kCCProgressTimerTypeHorizontalBarLR 水平從左往右
kCCProgressTimerTypeHorizontalBarRL 水平從右往左
kCCProgressTimerTypeVerticalBarBT 垂直從下往上
kCCProgressTimerTypeVerticalBarTB 垂直從上往下
CCProgressTimer* pt =CCProgressTimer::progressWithFile("image.png");
pt->setType(kCCProgressTimerTypeRadialCCW);
pt->setType(kCCProgressTimerTypeRadialCW);
pt->setType(kCCProgressTimerTypeHorizontalBarLR);
pt->setType(kCCProgressTimerTypeHorizontalBarRL);
pt->setType(kCCProgressTimerTypeVerticalBarBT);
pt->setType(kCCProgressTimerTypeVerticalBarTB);CCProgressTo* to =CCProgressTo::actionWithDuration(2,100);// 時間,百分比
pt->runAction(CCRepeatForever::actionWithAction(to));

4.5 場景轉換

CCTransitionScene :場景轉換效果ui

效果 說明 方法 參數
CCTransitionFade 以顏色淡出淡入 transitionWithDuration(時間, 場景, ccBLACK) ccc3(255,0,0) :三原色
CCTransitionFlipX 水平翻轉屏幕 transitionWithDuration(時間, 場景, kOrientationRightOver) kOrientationLeftOver:從左往右 
kOrientationRightOver:從右往左
CCTransitionFlipY 垂直翻轉屏幕 transitionWithDuration(時間, 場景, kOrientationUpOver) kOrientationUpOver :從上往下 
kOrientationDownOver:從下往上
CCTransitionFlipAngular 角度翻轉屏幕 transitionWithDuration(時間, 場景, kOrientationRightOver) kOrientationLeftOver:從左下角往上 
kOrientationRightOver:從右上角往下
CCTransitionZoomFlipX 水平翻轉並縮小/放大 transitionWithDuration(時間, 場景, kOrientationRightOver) kOrientationLeftOver:從左(放大)往右 
kOrientationRightOver:從右(放大)往左
CCTransitionZoomFlipY 垂直翻轉並縮小/放大 transitionWithDuration(時間, 場景, kOrientationUpOver) kOrientationUpOver :從上(放大)往下 
kOrientationDownOver:從下(放大)往上
CCTransitionZoomFlipAngular 角度翻轉並縮小/放大 transitionWithDuration(時間, 場景, kOrientationRightOver) kOrientationLeftOver:從左下角(放大)往上 
kOrientationRightOver:從右上角(放大)往下
CCTransitionShrinkGrow 收縮出放大入 transitionWithDuration(時間, 場景)  
CCTransitionRotoZoom 轉收縮出轉放大入 transitionWithDuration(時間, 場景)  
CCTransitionMoveInL 從左移動入 transitionWithDuration(時間, 場景)  
CCTransitionMoveInR 從右移動入 transitionWithDuration(時間, 場景)  
CCTransitionMoveInT 從上移動入 transitionWithDuration(時間, 場景)  
CCTransitionMoveInB 從下移動入 transitionWithDuration(時間, 場景)  
CCTransitionSlideInL 從左平滑移入 transitionWithDuration(時間, 場景)  
CCTransitionSlideInR 從右平滑移入 transitionWithDuration(時間, 場景)  
CCTransitionSlideInT 從上平滑移入 transitionWithDuration(時間, 場景)  
CCTransitionSlideInB 從下平滑移入 transitionWithDuration(時間, 場景)  
CCTransitionCrossFade 交叉淡入兩個場景 transitionWithDuration(時間, 場景)  
CCTransitionPageTurn 翻頁 transitionWithDuration(時間, 場景, 參數) true :合上 
false :翻開
CCTransitionFadeTR 往右上角馬賽克退出 transitionWithDuration(時間, 場景)  
CCTransitionFadeBL 往左下角馬賽克退出 transitionWithDuration(時間, 場景)  
CCTransitionFadeUp 往上角馬賽克退出 transitionWithDuration(時間, 場景)  
CCTransitionFadeDown 往下角馬賽克退出 transitionWithDuration(時間, 場景)  
CCTransitionTurnOffTiles 隨機馬賽克退出 transitionWithDuration(時間, 場景)  
CCTransitionSplitRows 基數行左,偶數行右退出 transitionWithDuration(時間, 場景)  
CCTransitionSplitCols 基數行上,偶數行下退出 transitionWithDuration(時間, 場景)  
CCTransitionFade* tfScene =CCTransitionFade::transitionWithDuration(2,newCCScene(), ccBLACK);if(tfScene){CCDirector::sharedDirector()->replaceScene(pScene);}

4.6 效果

說明 靜態函數
CCShaky3D 搖動的3D CCShaky3D::actionWithRange(5, true, ccg(15,10), t) // 範圍 是否搖動 網格大小 時間
CCWaves3D 波浪3D CCWaves3D::actionWithWaves(5, 40, ccg(15,10), t)
CCFlipX3D 水平翻轉3D CCFlipX3D::actionWithDuration(t)
CCFlipY3D 垂直翻轉3D CCFlipY3D::actionWithDuration(t)
CCLens3D 鏡面3D CCLens3D::actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, ccg(15,10), t)
CCRipple3D 波紋3D CCRipple3D::actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, 4, 160, ccg(32,24), t)
CCLiquid 液體效果 CCLiquid::actionWithWaves(4, 20, ccg(16,12), t)
CCWaves 波浪效果 CCWaves::actionWithWaves(4, 20, true, true, ccg(16,12), t)
CCTwirl 晃動效果 CCTwirl::actionWithPosition(CCPointMake(size.width/2, size.height/2), 1, 2.5f, ccg(12,8), t)
CCShakyTiles3D 搖動馬賽克 CCShakyTiles3D::actionWithRange(5, true, ccg(16,12), t)
CCShatteredTiles3D 破碎馬賽克 CCShatteredTiles3D::actionWithRange(5, true, ccg(16,12), t)
CCShuffleTiles 隨機馬賽克 CCShuffleTiles::actionWithSeed(25, ccg(16,12), t)
CCFadeOutTRTiles 往右上角馬賽克淡出 CCFadeOutTRTiles::actionWithSize(ccg(16,12), t)
CCFadeOutBLTiles 往左下角馬賽克淡出 CCFadeOutBLTiles::actionWithSize(ccg(16,12), t)
CCFadeOutUpTiles 往上馬賽克淡出 CCFadeOutUpTiles::actionWithSize(ccg(16,12), t)
CCFadeOutDownTiles 往下馬賽克淡出 CCFadeOutDownTiles::actionWithSize(ccg(16,12), t)
CCTurnOffTiles 馬賽克隨機消失 CCTurnOffTiles::actionWithSeed(25, ccg(48,32) , t)
CCWavesTiles3D 波浪馬賽克 CCWavesTiles3D::actionWithWaves(4, 120, ccg(15,10), t)
CCJumpTiles3D 跳動的3D馬賽克 CCJumpTiles3D::actionWithJumps(2, 30, ccg(15,10), t)
CCSplitRows 基數往左,偶數往下 CCSplitRows::actionWithRows(9, t)
CCSplitCols 基數往上,偶數往下 CCSplitCols::actionWithCols(9, t)
CCPageTurn3D 3D翻頁效果 CCPageTurn3D::actionWithSize(ccg(15,10), t)

4.7 節點

節點嵌套節點this

CCSprite* pSprite1 =newCCSprite();// 一個精靈至關於一個節點CCSprite* pSprite2 =newCCSprite();

pSprite1->addChild(pSprite2);// 一個節點嵌套另外一個節點

pSprite1->runAction(action);// 若是父節點執行動做,那此時全部子節點都會執行該動做。

節點刪除與清除

prettyprint(node, false/true);          // 節點,false不清理正在運行的動做、true清理正在運行的動做

4.8 精靈

說明 靜態函數 參數
CCSprite 精靈 CCSprite::spriteWithTexture(CCTexture2D*) 質地
CCSprite::spriteWithTexture(CCTexture2D*, CCRect&) 質地, CCRect 矩形
CCSprite::spriteWithTexture(CCTexture2D*, CCRect&, CCPoint&) 質地,矩形,CCPoint 點
CCSprite::spriteWithSpriteFrame(CCSpriteFrame*) CCSpriteFrame 精靈框架
CCSprite::spriteWithSpriteFrameName(char*) CCSpriteFrame名稱
CCSprite::spriteWithFile(char*) 文件名
CCSprite::spriteWithFile(char*, CCRect&) 文件名,矩形
CCSprite::spriteWithBatchNode(CCSpriteBatchNode*, CCRect&) CCSpriteBatchNode批量節點,矩形
CCSpriteBatchNode 精靈批量節點 CCSpriteBatchNode->addChild(CCSprite) 添加多個精靈到節點上

4.9 定時器

schedule(schedule_selector(Class::callback),1);// 回調,時間;每隔1秒執行一次voidClass::callback(ccTime dt){}

unschedule(schedule_selector(Class::callback));// 取消定時器

4.10 內存管理 原則:每一個自定義類必須繼承 cocos2d::CCObject 對象

CCObject對象的內存管理相關接口

// 引用次數+1 virtualvoidCCObject::retain(void);// 引用次數-1;若引用計數器=0,則delete this; virtualvoidCCObject::release(void);// helper方法,快速判斷當前對象只有惟一引用 boolCCObject::isSingleRefrence(void);// 返回引用次數 unsignedintCCObject::retainCount(void);// 自動釋放(自動管理)CCObject*CCObject::autorelease(void);

手動管理內存

classMyClass:public cocos2d::CCObject{public:MyClass();~MyClass();}MyClass* obj =newMyClass();...
obj->release();// 誰生成(new、copy)誰負責release// 誰retain,誰負責release。
obj->retain();...
obj->release();// 傳遞賦值時,須要先retain形參,後release原指針,最後賦值。(注意,由於這裏沒有使用自賦值檢查,因此這組順序不能錯。)voidCCNode::setGrid(CCGridBase* pGrid){ 
    CC_SAFE_RETAIN(pGrid);
    CC_SAFE_RELEASE(m_pGrid);
    m_pGrid = pGrid;}

自動管理內存

MyClass* obj =newMyClass();
obj->autorelease();// 每幀繪製結束,就自動release池中的對象。
相關文章
相關標籤/搜索