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返回的是引用
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);// 運行動做
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){// 回調}
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);
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));
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);}
類 | 說明 | 靜態函數 |
---|---|---|
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) |
節點嵌套節點this
CCSprite* pSprite1 =newCCSprite();// 一個精靈至關於一個節點CCSprite* pSprite2 =newCCSprite(); pSprite1->addChild(pSprite2);// 一個節點嵌套另外一個節點 pSprite1->runAction(action);// 若是父節點執行動做,那此時全部子節點都會執行該動做。
節點刪除與清除
prettyprint(node, false/true); // 節點,false不清理正在運行的動做、true清理正在運行的動做
類 | 說明 | 靜態函數 | 參數 |
---|---|---|---|
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) |
添加多個精靈到節點上 |
schedule(schedule_selector(Class::callback),1);// 回調,時間;每隔1秒執行一次voidClass::callback(ccTime dt){} unschedule(schedule_selector(Class::callback));// 取消定時器
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池中的對象。