一、下载
http://cocos2d-x.org/projects/cocos2d-x/wiki/Download
二、安装 环境:Ubuntu 12.04.1 32bit
$ 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环境
三、HelloWorld 需要有Android SDK环境与Ant,点击查看
$ 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 // 安装到机器上
四、Cocds2d-x基础
主要类介绍
类 | 说明 | 作用 | 关系 |
---|---|---|---|
CCDirector |
导演(单例) | 负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。 | 包含多个 CCScene |
CCScene |
场景 | 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。 | 包含多个 CCLayer |
CCLayer |
布景 | 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等 | 包含多个 CCSprite |
CCSprite |
精灵 | 就是演员的,演员就需要加入到层里面去的。有相应的动作。 | 包含多个 CCAction |
CCAction |
动作 | 精灵的动作。 | |
CCMenu |
菜单 |
场景的转换
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场景}
常见宏
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) |
动作1、运作2、…、后面必须加NULL表示没有了 |
CCRepeatForever |
重复执行动作 | CCRepeatForever::actionWithAction(actionTo) |
动作 |
CCSpawn |
同时执行动作 | CCSpawn::actions(actionTo, actionToBack, NULL) |
动作1、运作2、…、后面必须加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.html
// 创建菜单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
:场景转换效果
效果 | 说明 | 方法 | 参数 |
---|---|---|---|
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 节点
节点嵌套节点
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池中的对象。