cocos2dx笔记.pdf





《cocos2dx笔记.pdf》由会员分享,可在线阅读,更多相关《cocos2dx笔记.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一部分 引擎基础 第一章 Hello Cocos2d-x(1)精灵(sprite):一切可见元素(2)只有把一个游戏元素放置到其他已经呈现出来的游戏元素中,它才会呈现出来。(3)CCNode:addChild 方法:组合游戏元素(4)Vs2010 中运行 cocos2d-2.0-x-2.0.4 的时候,若出现如下错误:错误描述如下:1正在编译资源.1正在编译资源清单.1正在链接.1CVTRES:fatal error CVT1100:重复的资源。type:MANIFEST,name:1,language:0 x0409 1LINK:fatal error LNK1123:转换到 COFF 期
2、间失败:文件无效或损坏 1生成日志保存在“file:/c:WTL80_7108_Beta1SamplesBmpViewDebugBuildLog.htm”1BmpView-2 个错误,1 个警告=全部重新生成:0 已成功,1 已失败,0 已跳过=解决方法如下:项目属性配置属性清单工具输入和输出嵌入清单:原来是“是”,改成“否”。不要说 项目属性配置属性清单工具输入和输出嵌入清单:原来是“是”,改成“否”。和 项目-属性-配置属性-C/C+-预处理器-预处理器定义,增加_CRT_SECURE_NO_DEPRECATE 每次新建项目都要改属性,我要一次就能解决的 则尝试使用一下方法:在电脑里面搜索
3、发现 C:Program FilesMicrosoft Visual Studio 10.0VCbin C:Windowswinsxsx86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65 C:WindowsMicrosoft.NETFrameworkv4.0.30319 这三个路径里面都有 cvtres.exe 文件,尝试使用第二个路径里面的文件替换第一个路径的文件,问题解决。(这个问题是 windows 自动更新造成编译器 cvtres.exe 的版本过低,如果 windows
4、 再次更新,则还可能出现这样的问题,届时再重复一下上述步骤即可。)参考资料:Cocos2d-x win7+vs2010 配置图文详解(亲测)网址:http:/ Cocos2d-x 建工程时避免 copy 文件夹和库 网址:http:/ C+程序,按下 F5,老是弹出一对话框显示信息:debugging information for myproject.exe cannot be found or does not match.No symbols loaded.翻译成中文大概就是:不能找到myproject.exe 的调试信息或者调试信息不匹配。符号文件未加载。起初,我以为是没有生成.pdb
5、 文件的缘故,于是,我右击项目文件,点击属性,展开配置属性节点,展开 C/C+节点,点击了 General 后把 Debug Information Format 设置为:Program Database for Edit&Continue(/ZI).跟着,又检查了其它选项,并且确信在项目文件的 Debug 文件夹下生成了相应的.pdb 文件。可是做了这些,还是没用。仍然弹出那个该死的对话框。我于是另外新启动了一个 VS 实例,新建了一个简单的工程,按下 F5,调试没问题,嘿,这问题到底出在哪儿呢?然后,我心想,你丫狠!看来我得来点比你更狠的,于是乎,我干脆运行咱的.exe 文件,然后单击 V
6、isual Studio 的 Tools 菜单,选择 Attach to process.,并找到我的应用程序,还是没用!我要发疯了!关键时刻咱得保持冷静!分析下!第一,我这个工程是前几天做过的。第二,.pdb 文件有,手动加载文件也试过。不过没用。第三,新建一个项目调试,没问题。脑袋里突然冒出:是不是.suo 文件在作怪?-解决方案-1.关闭掉Visual Studio 实例。2.找到解决方案下的.suo 文件并删除之。3.重新启动Visual Studio,或者直接双击.sln 文件打开 4.成功调试程序!后来意识到这是Visual Studio 非常严重的问题。因为.suo 貌似非常容易
7、损坏,但是它里面包含了许多调试信息,包括项目的打开文件列表、所有的断点、以及监视窗口中所有的内容。可以运行如下命令来删除掉该文件:del/f/a:h/s*.suo 希望对遇到该类问题的朋友有所帮助!欢迎提出问题讨论!另外 有一些解决方法:首先打开菜单 项目-项目属性页 选择 配置属性-链接器-调试-生成调试信息 改为 是 选择 配置属性-C/C+-常规-调试信息格式 改为 用于“编辑并继续”的程序数据库(/ZI)选择 配置属性-C/C+-优化-优化 改为 禁用(/Od)第二章 基本概念(1)游戏流程控制场景层精灵(FPS:每秒帧速率)场景(CCScene):内容相对不变的游戏元素集合称作场景
8、流程控制:游戏在场景之间切换的过程;游戏流程控制器(CCDirectory单例模式)层(CCLayer):隶属场景之下的游戏元素(菜单、触摸、动作、背景层)精灵(CCSprite):隶属于层,是场景中出现的可见图形(2)关系图=渲染树子节点相对于父节点的属性。(3)动作(CCAction)=持续性动作类(CCActionInterval)+瞬时性动作类(CCActionInstant),动画(animation)只能应用于精灵。(4)使用宏USING_NS_CC 来引用cocos2d 命名空间,类名称采用驼峰法。(5)Cocos2d-x 创建对象:所有对象都创建在堆上,然后通过指针引用。A n
9、ew 操作符+init 初始化 B静态工厂方法(Create()方法autorelease()两者不同:使用构造函数创建的对象,它的所有权已经属于调用者了,使用工厂方法创建的对象的所有权却并不属于调用者,因此,使用构造函数创建的对象需要调用者负责释放,而使用工厂方法创建的对象则不需要。(6)为了保证初始化方法可以被子类重载,需要确保初始化方法声明为虚函数。(7)选择器(Selector):类似于C+中的类的函数指针的机制。(8)Cocos2d-x 提供了一系列宏来帮助我们方便的创建属性,他们定义在引擎目录中的“platform/CCPlatformMacros.h”中。每个宏都有3 个参数:1
10、.varType:属性类型,如果属性类型是对象,需要写成指针的形式;2.varName:属性的私有字段名称;3.funName:属性的访问器名称,也就是紧接在get 或 set 前缀后的部分。Cocos2d-x 内存管理:(9)两种实现智能内存管理的技术:一是引用计数根类CCObjec;二是(自动且不可预知的进行)垃圾回收autorelease()+自动回收池。(10)Cocos2d-x 在每一帧结束后释放一次回收池,并在下一帧开始前创建一个新的回收池。代价维护一个将要执行释放操作的对象列表。(11)手动释放和创建回收池CCPoolManager 的pop()或push()方法。自动回收池可嵌
11、套,多个自动回收池排列成栈结构,autorelease 对象仅添加到顶端的池中。(12)避免滥用autorelease(),原因1 占用内存和CPU;2 对象释放操作的错误很难定位,autorelease 只在每一帧结束时才执行。结论:只在工厂方法等不得不用的情况下使用。(13)Cocos2d-x 引擎为我们提供了CCArray、CCDictionary 等 Objective-C风格的容器Cocos2d-x 容器保证了容器对对象的存取过程总是符合引用计数的内存管理原则。(14)Cocos2d-x 中与内存管理有关的宏头文件“CCPlatformMacro.h”Cocos2d-x 内存管理原则
12、:1.程序段必须成对执行retain()和release()或者执行autorelease()来开始和结束对象的引用;2.工厂方法返回前,应通过autorelease()结束对该对象的引用;3.对象传值时,应考虑到新旧对象相同的特殊情况;4.尽量使用release()而不是autorelease()来释放对象引用,以确保性能最优;5.保存CCObject 的子类对象是,应严格使用Cocos2d-x 提供的容器,避免使用STL 容器,对象必须以指针形式存入。(15)AppDelegate 是整个程序的入口,处理生命周期中的4 个重要事件:程序完成初始化,程序进入后台,程序重回前台和程序结束退出。
13、第三章 游戏的基本元素(1)CCDirector(单例设计模式):游戏在CCDirector 的管理下完成了呈现设定与流程控制。Cocos2d-x 高级开发教程P33(2)CCScene:层的容器+流程控制。CCTransitionScene:场景切换特效。(3)CCLayer:精灵的容器+接受用户输入,addChild 向场景中添加层。(4)CCSprite:最小可见单位,装载一个平面纹理。(5)纹理:被精灵显示出来的图片,更深入:纹理是3D 绘图库OpenGL 绘制到物体表面上的图案。纹理的坐标系中原点(0,0)位于左上角,原点向右是x 轴的正方向,原点向下是y 轴的正方向。1.创建精灵:
14、图片文件、纹理、或者精灵框帧。2.纹理相关属性。P39 CCNode(6)渲染树包含许多的CCNode。一切游戏元素都继承自CCNode,CCNode 提供的基本功能如下:(CCNode 属性参见P42)1.包含其他CCNode 对象;2.接受各种事件与回调函数,如定时器事件;3.运行动作。(7)Cocos2d-x 坐标系:绘图坐标系(以左下角为原点):与OpenGL 采用的坐标系相同;纹理坐标系(以左上角为原点):只有从纹理中截取部分矩阵时才使用这个坐标系。(8)锚点(AnchorPoint):锚点两个参量x 和 y 取值通常都是0-1 之间的实数,表示锚点相对于本节点长宽的位置。P42 位
15、置(Position):Position 指的是锚点(相对于本节点长宽的位置坐标点)在本节点的父节点中的坐标值。(9)定时器:以一定时间间隔连续引发游戏事件的工具。两种实现定时机制 update 方法和schedule 方法。P44 update 定时器:在每帧绘制之前都会被触发一次。启用(scheduleUpdate 方法)+重载update schedule 定时器:以一定的时间间隔(必须大于两帧的间隔)连续调用某个函数。(schedule 方法启用)(10)定时器机制是Cocos2d-x 调度机制的基础,Cocos2d-x 的调度是纯粹的串行机制,所有函数都运行在同一个线程。(11)Co
16、cos2d-x 内置的常用层:CCLayerColor:一个单纯实心色块 CCLayerGradient:一个色块,但可以设置两种颜色的渐变效果 CCMenu:十分常用的游戏菜单(普通状态、按下状态和响应事件)Cocos2d-x 调度原理(12)事件驱动的游戏框架,如定时器事件、触摸事件和传感器事件。(13)游戏主循环:处理用户输入,处理定时事件,绘图(14)定时调度器:一个管理所有节点定时器的对象,它负责记录定时器,并在合适的时间发出定时事件。CCSchedule 类(定时调度器类)管理定时器,并且分别处理update 定时器(Updates 容器)和普通定时器(Selectors 散列表)
17、(15)CCTimer 也提供了update 方法,不同的是其累计接收到的dt 时间,周期性的反复(或一次)触发定时事件。P57(16)事件驱动的普通定时器调用顺序:系统的时间事件驱动游戏主循环,游戏主循环调用CCScheduler 的 update 方法,CCScheduler 调用普通定时器对应的 CCTimer 对象的update 方法,CCTimer 类的update 方法调用定时器对应的回调函数。对于update 定时器,调用顺序更为简单。(17)每个定时器互不干扰,串行执行。第四章 动作(1)CCAction 是一个基类,一个 CCAction 只能使用一次,CCAction 的绝
18、大多数实现类都派生自CCFiniteTimeAction,这个类定义了在有限时间内可以完成的动作。由CCFiniteTimeAction派生出的两个主要类分别是瞬时动作(CCActionInstant)和持续性动作(CCActionInterval)。瞬时性动作:CCPlace、CCFlipX 和 CCFlipY、CCShow 和 CCHide、CCCallFunc 持续性动作:1.位置变化动作:CCMoveTo、CCJumpTo、CCBezierTo;2.属性变化动作:CCScaleTo、CCRotateTo、CCFadeIn/Out、CCFadeTo、CCTintTo;3.视觉特效动作:C
19、CBlink;4.控制动作:CCDelayTime、CCRepeat、CCRepeatForever;复合动作:重复(CCRepeat)、并列(CCSpawn)、序列(CCSequence)、延时(CCDelayTime);变速动作:CCSpeed、CCActionEase(2)当我们创建更多动作的组合时,引擎会把动作分解为两部分来看待,其中后一部分只包含最后一个动作,而前一部分包含它之前的所有动作,引擎把 m_pTwo 设置为后一部分的动作,把 m_pOne 设置为其余所有动作的组合。(3)创建自定义动作:CCAction 包含两个重要的方法:step 与 update。step 方法会在每
20、一帧动作更新时触发,该方法接受一个表示调用时间间隔的参数 dt,dt 的积累即为动作运行的总时间。引擎利用积累时间来计算动作运行的进度(一个从 0 到 1 的实数),并调用 update 方法更新动作。update 方法是 CCAction 的核心,它由 step 方法调用,接受一个表示动作进度的参数,每一个动作都需要利用进度值改变目标节点的属性或执行其他指令。自定义动作只需要从这两个方法入手即可,我们通常只需要修改 update 方法就可以实现简单的动作。(4)Cocos2d-x动作原理:P80(5)CCActionManager的工作原理:动作的调度与定时器的调度都统一受到CCSchedu
21、ler的控制,具体地说,我们可以方便地同时暂停或恢复定时器与动作的运行,而不必考虑它们不同步的问题。第五章 动画与场景特效(1)动画:由帧组成(帧动画),利用定时器不停的改变精灵的显示内容。(2)框帧类(CCSpriteFrame):纹理+区域纹理是要显示的纹理,区域是此纹将要被显示的部分。(3)动画帧类(CCAnimationFrame):两个属性:对一个框帧的引用+帧的延时。(4)动画类(CCAnimation):对一个动画的描述,它包含显示动画所需要的动画帧。(5)动画动作(CCAnimate):我们使用 CCAnimation 描述一个动画,而精灵显示动画的动作则是一个 CCAnima
22、te 对象。动画动作 CCAnimate 是精灵显示动画的动作,它由一个动画对象创建,并由精灵执行。动画与动画动作的关系就如同 CD 光盘与 CD 播放机的关系一样-前者记录了动画的内容,而后者是播放动画的工具。(6)场景切换特效类(CCTransitionScene):场景特效的实现方式与复合动作类似,可以使用原场景作为参数来创建一个特效场景。文件源码:layers_scenes_transitions_nodes/CCTransition.h(cpp)第六章 音乐与音效(1)Cocos2d-x 的音效引擎库CocosDenshion:1.CDSoundEngine(封装OpenAL,只能被
23、OS X 平台支持)2.CDAudioManager(封装OpenAL,只能被OS X 平台支持)3.SimpleAudioEngine(单例):预加载、播放与停止、暂停与恢复播放P89 第七章 用户输入(1)CCStandardTouchDelegate接口:四个触摸事件回调函数(开始、移动、结束和取消),TouchEnable 属性:开启或关闭接收触摸输入。(2)响应触摸事件:触摸层通知游戏中的其他部件来响应触摸事件。(3)两种Cocos2d-x 触摸事件:P94。我们已经见到了 CCLayer 处理触摸事件的方法。当我们开启 CCLayer 的 TouchEnable 属性后,层中的 4
24、 个回调函数就会在接收到事件时被触发,我们把这类事件称作1.标准触摸(standard touch)事件,它的特点是任何层都会平等地接收全部触摸事件。除此以外,Cocos2d-x 还提供了另一种被称作2.带目标的触摸事件(targeted touch)机制。在带目标的触摸机制中,接收者并不平等,较早处理事件的接收者有权停止事件的分发,使它不再继续传递给其他接收者。换句话说,带目标的触摸事件并不一定会被广播给所有的接收者。通常,游戏的菜单按钮、摇杆按钮等元件常使用目标触摸事件,以保证触摸事件不对其他层产生不良影响。(4)标准触摸事件步骤:1.需要此对象实现 CCStandardTouchDele
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cocos2dx 笔记

限制150内