标签:
初学cocos2dx
Cocos2dx 中的主要概念包括:应用、导演、场景、层、精灵、动画、动作。
Cocos2dx里面的主要类
1、CCObject Object Object Object 是cocos2dx的主要基类。主要提供了引用计数的功能。
2、CCPoolManager CCPoolManager CCPoolManager CCPoolManager 是个单体类,负责管理多个垃圾回收器 CCAutoreleasePool 在CCObject::Autorelease方法中单体CCPoolManager 会将该对象加入到它管理的当前 CCAutoreleasePool对象m_pCurReleasePool中,m_pCurReleasePool就是目前 生效的垃圾回收器。
3、CCAutoreleasePool CCAutoreleasePool CCAutoreleasePool CCAutoreleasePool垃圾回收器 通过使用一个动态数组管理使用 CCObject::autorelease 加入进来的CCObject对象
4、)CCApplication 是Cocos2dx应用程序的主类,应用程序需要继承CCApplication 。在main函 数中需要定义一个CCApplication对象 并且执行 CCApplication的run方法。
5、)CCDirector 导演类 (是cocos2dx应用中很重要的类, 主要做场景的管理和调度) CCDirector初始化工作包括: 创建一个 CCScheduler调度器、 CCActionManager对 象管理器、CCTouchDispatcher触摸消息分配器、CCKeypadDispatcher键盘消息分 配器、CCAccelerometer加速器 并且通过CCPoolManager创建一个垃圾回收器。
导演类的drawScene方法中, 主要做以下几件事:
第一:通过调度器刷新执行所有实现了update方法的CCNode对象。(Cocosdx具体调度 机制参考下面的具体章节)
第二:设置当前的Scene,执行当前Scene的onEnter和onExit方法。
第三:通过visit方法开始开始递归渲染当前的Scene(包括添加到该Scene中 的所有子对象,并且会执行CCNode::draw方法)
第四:Director提供了一种扩展接口:setNotificationNode(参考下面函数实现) 可以通过这个方法设置一个非Scene对象到CCDirector中,由CCDirector 在主循环方法中递归调度。
第五:显示FPS、状态等信息
6、 CCNode CCNode CCNode CCNode CCNode最重要的成员方法:
创建和释放
virtualvoid onEnter();
virtualvoid onExit();
增加删除子对象
virtualvoid addChild(CCNode*child);
Virtualvoid addChild(CCNode*child,intzOrder);
virtualvoid addChild(CCNode*child,intzOrder,inttag);
virtualvoid removeChild(CCNode*child,boolcleanup);
//Onlyuse-thisfunctiontodrawyour stuff.DON‘Tdrawyour stuffoutsidethismethod
virtualvoid draw(void);
virtualvoid visit(void);
voidtransform(void);
//返回所占的矩形空间
CCRectboundingBox(void);
//运行动作相关
CCAction*runAction(CCAction*action);
voidstopAllActions(void);
voidstopAction(CCAction*action);
//调度相关
voidscheduleUpdate(void);
voidschedule(SEL_SCHEDULEselector);
voidschedule(SEL_SCHEDULEselector,floatinterval); voidschedule(SEL_SCHEDULEselector,floatinterval,unsignedintrepeat,floatdelay); voidscheduleOnce(SEL_SCHEDULEselector,floatdelay);
voidunschedule(SEL_SCHEDULE selector);
7、 Cocos2dx 常用的常量、工具
1》
cocoa\CCGeometry.h 定义了 CCPoint、 CCSize、 CCRect
constCCPointCCPointZero= CCPointMake(0,0);
constCCSizeCCSizeZero =CCSizeMake(0,0);
constCCRectCCRectZero =CCRectMake(0,0,0,0);
2》
NS_CC_BEGIN // 这是
namespace cocos2d { NS_CC_END // 这是 } !! !!
USING_NS_CC; // 这是 using namespace cocos2d; 这可以是常用宏。
3》
CC_SAFE_DELETE(p); // 当p不为NULL,delete p 并且将 p 赋为 NULL CC_SAFE_DELETE_ARRAY(p); // ...delete[] p..
CC_SAFE_FREE(p); // ...free p ...
CC_SAFE_RELEASE(p); // 当p不为NULL,p->release()
CC_SAFE_RELEASE_NULL(p); // 当p不为NULL,p->release() 并且将 p 赋为 NULL CC_SAFE_RETAIN(p); // 当p不为NULL,p->retain()
4》
CCRANDOM_0_1(); // 产生0到1之间的随机浮点数
CCRANDOM_MINUS1_1(); // 产生-1到1之间的随机浮点数
5》 support\CCPointExtension.h 取中点
ccpMidpoint(v1, v2); // 等价
ccp( (v1.x + v2.x)/2, (v1.y + v2.y)/2 ); 点乘、叉乘、投影
ccpDot(v1, v2); // 等价 v1.x * v2.x + v1.y * v2.y;
ccpCross(v1, v2); // 等价 v1.x * v2.y - v1.y * v2.x;
ccpProject(v1, v2) // 返回的是向量v1在向量v2上的投影向量
ccpLength(v) // 返回向量v的长度,即点v到原点的距离
ccpLengthSQ(v) // 返回向量v的长度的平方,即点v到原点的距离的平方
ccpDistance(v1, v2) // 返回点v1到点v2的距离
ccpDistanceSQ(v1, v2) // 返回点v1到点v2的距离的平方
ccpNormalize(v) // 返回v的标准化向量,就是长度为1
Cocos2dx的调度机制
Cocos2dx 目前有两种方法加入到调度机制中:
(1)通过注册scheduler方法 (该方法可以是本CCNode的方法也可以是其他类方法,只 要是一个函数指针就可以)
(2)通过实现CCObject::update方法, 并且执行CCNode::scheduleUpdate方法
Cocos2dx的垃圾回收机制
Cocos2dx为了更好的分配和释放对象, 设计了类似于Java的垃圾回收器,本质上就是让 基类CCObject 具有引用计数机制。
Cocos2dx的 Action
CCaction
{ CCSpeed 速度动作
CCFiniteTimeAction 限时动作
CCFollow 跟随动作{ CCActionInstant 瞬时动作
CCActionInterval 延时动作
}
}
Cocos2dx场景切换方式
场景切换主要调用 CCDirector::replaceScene 方法。 但是场景切换的动作可以是多种多样的。
CCTransitionFade, //渐隐效果
CCTransitionFadeTR,//碎片效果
CCTransitionJumpZoom,//跳动效果
CCTransitionMoveInL,//从左向右移动
CCTransitionPageTurn,//翻页效果
CCTransitionRadialCCW,//钟摆效果
CCTransitionRotoZoom,//涡轮效果
CCTransitionSceneOriented,//
CCTransitionShrinkGrow,//渐远效果
CCTransitionSlideInL,//左移
CCTransitionSplitCols,//上下移动
CCTransitionTurnOffTiles// CCTransitionScene:CCScene 基类
CCRotoZoomTransition 旋转缩小切换
CCJumpZoomTransition 缩小后跳跃切换
CCSlideInLTransition 从左向右切换
CCSlideInRTransition 从右向左切换
CCSlideInTTransition 从上向下切换
CCSlideInBTransition 从下向上切换
CCShrinkGrowTransition 逐渐缩小切换
CCFlipXTransition 已x中间为轴平面式旋转切换
CCFlipYTransition 已y中间为轴平面式旋转切换
CCFlipAngularTransition 侧翻式旋转切换
CCZoomFlipXTransition 缩小后x为轴旋转切换
CCZoomFlipYTransition 缩小后y为轴旋转切换
CCZoomFlipAngularTransition 缩小侧翻式旋转切换
CCFadeTransition 逐渐变暗切换
CCCrossFadeTransition 逐渐变暗切换2
CCTurnOffTilesTransition 随机方块覆盖切换
CCSplitColsTransition 三条上下分开切换
CCSplitRowsTransition 三条左右分开切换
CCFadeTRTransition 小方块大方块式切换 左下到右上 眩!
CCFadeBLTransition 小方块大方块式切换 右上到左下 眩!
CCFadeUpTransition 百叶窗从下向上 CCFadeDownTransition 百叶窗从上向下
CCTransitionRotoZoom:CCTransitionScene 旋转进入 CCTransitionJumpZoom:CCTransitionScene 跳动进入 CCTransitionMoveInL:CCTransitionScene<CCTransitionEaseScene> 从左侧进入 CCTransitionMoveInR:CCTransitionMoveInL 从右侧进入 CCTransitionMoveInT:CCTransitionMoveInL 从顶部进入 CCTransitionMoveInB:CCTransitionMoveInL 从底部进入 CCTransitionSlideInL:CCTransitionScene<CCTransitionEaseScene> 从左侧滑入 CCTransitionSlideInR:CCTransitionSlideInL 从右侧滑入 CCTransitionSlideInB:CCTransitionSlideInL 从顶部滑入 CCTransitionSlideInT:CCTransitionSlideInL 从底部滑入 CCTransitionShrinkGrow:CCTransitionScene<CCTransitionEaseScene> 交替进入 CCTransitionFlipX:CCTransitionSceneOriented x轴翻入(左右) CCTransitionFlipY:CCTransitionSceneOriented y轴翻入(上下) CCTransitionFlipAngular:CCTransitionSceneOriented 左上右下轴翻入 CCTransitionZoomFlipX:CCTransitionSceneOriented x轴翻入放大缩小效果(左右) CCTransitionZoomFlipY:CCTransitionSceneOriented y轴翻入放大缩小效果(上下) CCTransitionZoomFlipAngular:CCTransitionSceneOriented 左上右下轴翻入放大缩小效果 CCTransitionFade:CCTransitionScene 变暗变亮进入 CCTransitionCrossFade:CCTransitionScene 渐变进入 CCTransitionTurnOffTiles:CCTransitionScene<CCTransitionEaseScene> 小方格消失进入 CCTransitionSplitCols:CCTransitionScene<CCTransitionEaseScene> 竖条切换进入 CCTransitionSplitRows:CCTransitionSplitCols 横条切换进入 CCTransitionFadeTR :CCTransitionScene<CCTransitionEaseScene> 小方格右上角显示进入 CCTransitionFadeBL:CCTransitionFadeTR 小方格左下角显示进入 CCTransitionFadeUp:CCTransitionFadeTR 横条向上显示进入 CCTransitionFadeDown:CCTransitionFadeTR 横条向下显示进入
cocos2dx 粒子系统
cocos2d粒子系统有两种方式,一种是使用代码设置参数;第二种是用导入plist属性列表文件 的方式来配置粒子系统。
粒子的贴图没有具体限制,可以是灰度图,也可以是一张具体的图片。但要小于64x64pixel
cocos2dx 粒子系统支持2种模式 模式A: 重心模式 (粒子发射出来后会向重心方向做抛物运动) 模式B: 辐射模式(粒子发射出来后会向四周运动)
【粒子系统参数】 :
系统参数: Systemlifetime 粒子系统生命周期, 到期消失 Emission 放射速度 Particle lifetime 粒子生命周期, 在min和max中选取, 越大粒子存活时间越长, 运行的 时间越久 texture 图片 Blend 模式: additive(添加模式, 将粒子之间的颜色进行叠加,加强) 、blend(混合模式) 混台模式可以得到多层复合的图像效果。 利用混台模式可以改变两个或两个以上重叠对象的透明度或者颜色相互关系
移动参数: Direction 方向 Spread 向四周传播密度 speed 移动速度 Gravity 受重力参数 radialacceleration 径向加速度,直射到四周范围 tangentialacceleration 切向加速度,旋转放射弧度
粒子表现 Particlesize 粒子大小 startvar end Particlespinning 粒子自旋转 startvar end Particlealpha 粒子alpha值 startvar end Particleclore 粒子颜色 startvar end
例子: CCParticleSystemQuad*m_emitter=CCParticleFireworks::create(); m_new_tower->addChild(m_emitter,10); m_emitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("res/fork.png")); m_emitter->setTotalParticles(10); //这个位置相对于附属sprint的原点 m_emitter->setPosition(ccp(0,0));
cocos2dx 渲染类 Texture
CCTexture2D: 纹理,即图片加载入内存后供CPU和GPU操作的贴图对象。 CCTexturePVR:处理PVR文件生成纹理的类 CCTextureCache:纹理管理器,负责加载图片并对生成的纹理进行管理。通过“字典”来进 行快速的查询。。 CCTextureAtlas:纹理块管理器,如果图片是由多个小图块组成的,则纹理块管理器用来存储 这些小图块的相关信息,以方便绘制相应图块。
Cocos2dx地图编辑器
(推荐)
http://www.mapeditor.org/
Tiled 是基于Java/Qt的开源区块地图编辑器,Tiled支持2D和2.5D地图及多种区块类型,
它将地图保存成TMX(Tile Map XML)文件(实际就是xml文件),借助xml的特性使地图可通用 于各种游戏平台。 Tiled还支持通过插件来读写地图数据,用户可以方便地自定义地图的输出格式。Tiled给每 个区块命名,并通过区块集(tileset)提供了简单的区块管理工具。 Tiled同样支持地图分层,并且可以为每个层次添加各种属性。除此之外,Tiled还支持自定 义对象图层,用户可以在该层上添加各种数据,这对地图的事件触发设置提供了较好的支持。 另外,Tiled将所有图片都以最小单位区块的大小进行切割,以牺牲地图美观来避免深度排 序和图片偏移等复杂的计算。
http://tilestudio.sourceforge.net/
Tile Studio 是一款基于Delphi平台、采用Pascal语言开发的开源通用区块地图编辑器。
Tile Studio的程序体积很小,但其功能强大,除了用于创建和编辑2D游戏地图,最大的特 点是可以编辑区块。除此之外,Tile Studio还支持自定义地图输出格式和地图层次划分等 功能。但Tile Studio仅支持2D地图,并不支持2.5D地图。另外,Tile Studio没有提供资源 管理的功能,每次创建一个地图都必须重新导入和编辑全部区块资源,在使用上不方便。
http://www.tilemap.co.uk/mappy.php
Mappy 也是基于区块的通用地图编辑器,而且支持2D和3D地图。在2D方面,Mappy的功能
和Tiled类似,但没有区块管理的功能。Mappy将地图保存为FMP文件,所以使用Mappy首先要 解决的问题是如何读取FMP文件。另外,Mappy虽然提供了多种开发语言版本,但相关文档缺 乏,难以根据实际情况进行扩展。易操作性上,Mappy缺少快捷工具栏,使用起来很不方便, 且运行速度慢,在编辑较大的地图时经常卡住。
http://sourceforge.net/projects/mepper/
Mepper 也是基于区块的Java开源地图编辑器, 目前仅支持2D和2.5D. Mepper的功能和
Tiled类似, 但它没有lua的支持. Mepper还支持整图地图和分块地图. 有功能比较完善的资源管理系统, 能够方便地将地图资源复用于多个游戏地图. 此外, Mepper支持复合区块, 即可以在一个区块上添加另一个区块. Mepper还自带一个边缘生成 的算法,
用于支持地表边缘自动生成.
【总结】 上述四种编辑器中,Mepper和Tiled的功能和性能都优于其它两款,且容易操作。 Tiled Studio的功能相对比较简单,适合于移动设备上的游戏开发。
Cocos2dx 开发常用工具
位图字体工具 Bitmap Font Tools BMFont (Windows) Fonteditor Glyph Designer Hiero LabelAtlasCreator
粒子编辑工具 Particle Editing Tools ParticleCreator Particle Designer
物理编辑工具 Physics Editing Tools Mekanimo PhysicsBench PhysicsEditor VertexHelper
场景编辑工具 Scene Editing Tools CocosBuilder Cocoshop LevelHelper
纹理地图集工具 Texture Atlas Tools DarkFunction Editor
SpriteHelper TexturePacker Zwoptex
瓦片地图编辑工具 Tilemap Editing Tools iTileMaps Tiled Map Editor
声音特效编辑工具 Audio Effect Editing Tools cfxr
背景音乐编辑工具Background Music Editing Tools GarageBand (MAC 系统自带
源于网络上的一本书 、只是初学,还需慢慢消化。
标签:
原文地址:http://www.cnblogs.com/revenge/p/4345636.html