初学Cocos2dx
初学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 系统自带
源于网络上的一本书 、只是初学,还需慢慢消化。
初学Cocos2dx的更多相关文章
- cocos2d-x c++和object-c内存管理比较
转自:http://www.2cto.com/kf/201307/227142.html 既然选择了C++作为游戏开发的语言, 手动的管理内存是难以避免的, 而Cocos2d-x的仿Objctive- ...
- Cocos2dx打包apk时变更NDK引发问题及解决
现在官方的Cocos Studio已经支持打包apk文件,写该随笔的时候还没试过官方的打包功能,所以就按自己的学习顺序先把打包的心得写下. 问题及最终解决方案: 其中耗时最长的问题就是ndk-r10改 ...
- xcode 手动管理内存 的相关知识点总结
一.XCode4.2以后支持自动释放内存ARC xcode自4.2以后就支持自动释放内存了,但有时我们还是想手动管理内存,这如何处理呢. 很简单,想要取消自动释放,只要在 Build Setting ...
- 深入理解 cocos2d-x 坐标系
首先对于初学的,带大家认识 cocos2d-x 中坐标系的几个概念,参考 http://blog.csdn.net/tskyfree/article/details/8292544.其他的往下看. 弄 ...
- [转]eoe社区cocos2d-x游戏引擎知识大汇总
[eoeAndroid 社区]特意为大家汇总了cocos2d-x知识贴,分量十足,纯正干或.从基础教程到游戏应用的开发,我们不让知识流失,我们要做知识的搬运工还有加工 师.希望大家能够一起的学习,和大 ...
- Cocos2d-x 学习资料收集
框架源代码: http://code.google.com/p/cocos2d-x/downloads/list 搭建环境 http://blog.csdn.net/ccf19881030/artic ...
- [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
链接地址:http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言:cocos2dx作为一个开源的移动2D游戏框 ...
- 15款Cocos2d-x游戏源码
(1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象棋游戏,游戏中可以实现.新局面.悔棋.游戏音乐.胜利后会显示游戏结果. 源码下载:http://www ...
- android学习-ndk-build(androidstudio编译cocos2d-x库的cpp为so文件的解释)
本文不作为ndk初学使用,只是对cpp等c++文件编译成so文件的过程中,参数含义,及ndk配置的解释.使用的技术比较旧. androidStudio使用gradle调用ndk-build工具编译c+ ...
随机推荐
- index range scan,index fast full scan,index skip scan发生的条件
源链接:https://blog.csdn.net/robinson1988/article/details/4980611 index range scan(索引范围扫描): 1.对于unique ...
- 聊聊iOS Keychain
某天,小熊碰见这样一个错误 Couldn't update the Keychain Item问题处理 ,网上搜索了下网上很多解决方案,依然百撕不得骑姐.后来参考下面两篇文章.才发现是用法不正确,网上 ...
- vue实现分页
效果图: html页面: data数据: 方法: 计算属性: 样式: html代码: <!--分页--> <div class="page-bar"> &l ...
- Mac设置信认任意来源应用
升级了Mac 10.13.4 后应用软件各种不适配,最近更新了一个应用版本,在去安全设置里面 信任应用的时候,发现"任何来源"这个选项不见了!不见了!WTF! 接下来,我们就打开终 ...
- vue实现首页导航切换不同路由的方式
vue实现切换首页路由导航 ,根据切换的不同导航跳转不同的路由,以及当前选中的导航添加选中样式. html代码: <nav> <!-- 导航栏 --> <div cla ...
- 基于 Keras 用 LSTM 网络做时间序列预测
目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...
- c# multi-ply download ui
first neet add an user control "DownloadBar": /* Created by SharpDevelop. User: gwang Date ...
- Spring的IOC理解(转载)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- Vue随性小笔记
1 前端MVC 和 后端MVC不同: 可以看出前端MVC其实为了解决前端复杂js模块化的问题,从后端MVC的V分离出来的 2 MVC / MVP / MVVM 三者区别 Model View ...
- C# 通过copydata实现进程间通信
最近公司需要实现一个基于copydata进程间通信的功能.原来一直没有接触过Windows的进程通信,这次正好可以学习一下. 程序是基于Winform的,下面直接上代码. 公共类: public cl ...