文章目录
cc目录结构



cocos2dx:cocos2d-x引擎的核心部分,存放了引擎的大部分源文件,开发时link此包会有代码提示

文件夹结构: Classes–c++源文件

                      proj.android:放安卓文件

                      Resources:放资源文件,一般直接放至安卓文件下的assets

安卓文件结构(用到的):

assets:放资源文件   (常用)

bin:生成的apk文件            

Classes:link入,在此修改c++源文件 (常用)

cocos2dx:link入,放了引擎的源代码,link入会有代码提示

jni: 放了一些主配置比如Application等编译配置

libs:放了编译后的linux运行文件 ,每修改一次项目编译后会生成.so文件, System.loadLibrary("game");就是load这个                        



框架概述:

##### 1.Cocos2d-x 整体描述

CCNode 节点类              是cc中的核心类,是layer,scene和精灵等的父类

导演(CCDiretor):整个游戏的组织和控制核心,是游戏的运行规则

摄像机(CCCamera)  :画面的旋转、平移等位置变化

场景(CCScene)  :在游戏里,场景就是关卡。关卡由人物角色和背景构成。场景存放的是需要渲染的布景,任务角色和菜单,它可以作为一个整体,一起渲染,一起销毁,一起被场景切换使用。

布景(CCLayer):  从概念上说,布景就是场景里的背景,一般一个场景可以有很多层

角色精灵(CCSprite)  :精灵是整个游戏开发处理的主要对象,包括主角和敌人、NPC等,甚至是飘过的一朵云

动作(CCAction): 角色所具有的动作,一般用于精灵发生动作时使用,如移动,释放魔法等。







常用的cocos2d-x工具

TiledMap (地图编辑器)ParticleEditor粒子编辑器cocosBuilder,cocostudio(可视化编辑)Texture
Packer
(图片组合工具)等





左下角三行含义

在cocos2d-x 2.x 之后,大家都看到了左下角的FPS变成3行,多了两行数据。

1.最上面一行是指的当前场景的渲染批次。(简单理解为需要渲染多少个贴图出来)

2.中间一行是渲染每一帧需要的时间。

3.最下行就是大家熟悉的FPS。





简单使用

绘制字符串 

 //  CCSprite pSprite = CCSprite::create("HelloWorld.png");   //这个是绘制图片的 

CCLabelTTF pLabel = CCLabelTTF::create("Hello","Arial",24);   //创建类

CCSize size = CCDirector::sharedDirector()->getWinSize();   //设置坐标点

pLabel->setPosition(ccp(size.width/2,size.height-50));    

this->addChild(pLabel,1);   //加入当前图层,第二个参数越大则在越上层

添加按钮

1、CCLAbelTTF + CCMenuItmeLabel

CCLabelTTF pLabel = CCLabelTTF::create("Hello","Arial",24);   //创建类

CCMenuItemLabel
pItemLabel = CCMenuItemLabel::create(pBtn);

CCMenu pMenu = CCMenu::create(pItemLabel,null);  

this->addChild(pMenu,1);

2、直接用CCMenuItemFont

CCmenuItemFont* pItemFont = CCMenuItemFont::create("12312",this,Null);  //this=当前图层,Null=监听事件

CCMenu
pMenu = CCMenu::create( pItemFont  ,null);

3、使用图片按钮CCMenuItemImage

CCmenuItemImage p = CCmenuItemImage::create("Close.png","CloseSelect.ong",this,Null);

添加精灵:

添加活动精灵

1、生成纹理CCTexture2D
t = CCTextureCache::sharedTextureCache()->addImage("路径");

2、截取帧 CCSpriteFrame f = CCSpriteFrame::create(t,CCRectMake(起点x,起点y,结束x,结束y));

3、帧加入  CCArray array = CCArray::create(总帧数);

4、生成动作CCAnimation

5、初始化CCSprite并添加到图层

6、使用CCAnimation 生成CCAnimate  (CCAnimation是动画,CCAnimate是动作)

7、CCSprite绑定CCAnimate





代码:





    CCSize s = CCDirector::sharedDirector()->getWinSize();

    //#1:生成动画需要的数据类

CCTexture2D texture=CCTextureCache::sharedTextureCache()->addImage("pic2476.png");

CCSpriteFrame frame0=CCSpriteFrame::createWithTexture(texture,CCRectMake(320, 480, 32, 48));

CCSpriteFrame frame1=CCSpriteFrame::createWithTexture(texture,CCRectMake(321, 480, 32, 48));

CCSpriteFrame frame2=CCSpriteFrame::createWithTexture(texture,CCRectMake(322, 480, 32, 48));

CCSpriteFrame frame3=CCSpriteFrame::createWithTexture(texture,CCRectMake(323, 480, 32, 48));




CCArray animFrames = new CCArray(4);

//CCArray<CCSpriteFrame> animFrames = new CCArray<CCSpriteFrame>(4);

animFrames->addObject(frame0);

animFrames->addObject(frame1);

animFrames->addObject(frame2);

animFrames->addObject(frame3);

CCAnimation animation = CCAnimation::createWithSpriteFrames(animFrames, 0.2f);

animFrames->release();

//#2:初始化并设置Sprite

CCSprite sprite = CCSprite::createWithSpriteFrame(frame0);

//设置一个初始frame

sprite->setPosition( ccp( s.width/2, s.height/2) );

addChild(sprite);

//#3:使用animation生成一个动画动作animate

CCAnimate animate = CCAnimate::create(animation);

sprite->runAction(CCRepeatForever::create(animate));//重复播放





动作

CCAction

一、立即动作:(CCActionInstant


立即动作的共同基类是CCActionInstant。CCActionInstant的常用子类有:

CCFlipX:X轴翻转、CCFlipY:Y轴翻转

CCHide:隐藏、CCShow:显示、CCToggleVisibility:切换可视性

CCPlace:放置到一个位置

CCCallFunc家族:回调函数包装器(适配器)


回调函数:(理解成自定义动作)

需要使用宏来转换函数指针类型(callfunc_selector)


CCAction a1=CCCallFunc::actionWithTarget(this, callfunc_selector(A::f1));

this->runAction(a1);





二、持续动作(CCActionInterval家族)


两种后缀By,To


简单的:

CCMoveTo:移动到、CCMoveBy:按……移动

CCJumpTo:跳跃到、CCJumpBy:按……跳跃

CCBezierTo:贝兹移动到、CCBezierBy:按……贝兹移动


CCRotateTo:旋转到、CCRotateBy:按……旋转

CCScaleTo:缩放到、CCScaleBy:按……缩放

CCSkewTo:切变到、CCSkewBy:按……切变

CCTintTo:颜色渐变到、CCTintBy:按……颜色渐变


CCFadeIn:从无到有,也叫淡入、CCFadeOut:从有到无,也叫淡出、CCFadeTo:改变不透明度到某个值

CCBlink:闪耀

CCDelayTime:延时

(this->runAction(CCSequence::create(CCDelayTime::create(2),CCCallFunc::create(this, callfunc_selector(Enemy::getRemoved)),NULL));)




复杂的:

CCAnimate:帧动画,这个我们在第四节讲过,关于动画的问题不是一句两句就能说完,以后会慢慢展开

CCGridAction家族:网格动画

包装器:

CCRepeat:重复执行几次、

CCRepeatForever:永远执行、

CCSequence:按序列执行、

CCSpawn:同时执行、

CCActionEase家族:补间动画



反动作(可用此方法造成动作循环)


CCActionInterval  jump = CCJumpBy::actionWithDuration(2, CCPointMake(300,0), 50, 4);

CCFiniteTimeAction  action = CCSequence::actions( jump, jump->reverse(), NULL);





三、补间动作(改变内部速率,有快慢)


补间动作有三种后缀:

In:表示动作执行先快后慢

Out:表示动作执行先慢后快

InOut:表示动作执行快-慢-快





CCSpeed(改变速率,快慢镜头)


CCActionInterval move = CCMoveBy::actionWithDuration(3,ccp(350,0));

CCSpeed *speed= CCSpeed::actionWithAction(move,2.0f); 





四、其他动作

CCFollow跟随动作

CCDelayTime延时动作

CCGridAction 网格动作家族

可以实现全屏幕的,翻转,抖动,震荡,水波纹等(不常用)

CCProgressFromTo与CCProgressTo 进度动作

(cocos2d-x提供的6中进度枚举值:



1. typedef enum {  
2.      kCCProgressTimerTypeRadialCCW,      /// Radial Counter-Clockwise 逆时针
3.      kCCProgressTimerTypeRadialCW,         /// Radial ClockWise 顺时针
4.      kCCProgressTimerTypeHorizontalBarLR,          /// Horizontal Left-Right 从左往右 常用
5.      kCCProgressTimerTypeHorizontalBarRL,         /// Horizontal Right-Left 从右往左
6.      kCCProgressTimerTypeVerticalBarBT,          /// Vertical Bottom-top 从下往上
7.      kCCProgressTimerTypeVerticalBarTB,         /// Vertical Top-Bottom 从上往下
8. } CCProgressTimerType;





存档问题

对于简单的游戏可以使用CCUserDefalt,但是对于复杂游戏,可以考虑使用SQLite。


一个建议的流程是:

if(!档案不存在)

{  使用缺省数据写入存档;}

else{读取存档并初始化数据;}







文章目录