




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Cocos2d-X学习教程 金山七尘斋程序组 张青 目录1 概述4 1. 1 编写目的4 1. 2 阅读建议4 1. 3 文档版本4 1. 4 版权介绍42 创建Cocos2d-X项目4 2. 1 获取Cocos2d-X4 2. 2 创建Win32项目4 2. 3 程序入口7 2. 4 一些重要的概念9 2. 5 如何添加一个精灵(Sprite)103 动作(Action)11 3. 1 定义动作11 3. 2 动作执行11 3. 3 相关例程114 触屏事件11 4. 1 场景触屏11 4. 2 布景触屏125 动作管理13 5. 1 基本动作管理136 场景间切换效果147 CCProgressTimer168 场景特效169 粒子系统1810 运动中的加速度效果1912 图形绘制22 12. 1 画点22 12. 2 画直线22 12. 3 画圆22 12. 4 画多边形22 12. 5 画贝塞尔曲线2313 内存回收机制2314 菜单项24 14. 1 CCMenuItemLable24 14. 2 CCMenuItemSprite25 14. 3 CCMenuItemToggle2515 CCOrbitCamera2516 LayerColor26 16. 1 CCLayerColor27 16. 2 CCLayerGradient2817 瓦片地图集28 17. 2 tmx文件2918 Lable31 18. 1 CCLabelTTF31 18. 2 CCLabelAtlas31 18. 3 CCLabelBMFont3219 物理引擎Box2D3321 精灵类3722 动画类3823 屏幕旋转3924 Schedule4025 系统语言4026 音乐声效4127 CCRenderTexture4228 游戏存档4329 切换高清4430 抗锯齿4431 CCMutableArray4532 CocosBuilder461 概述1. 1 编写目的作为手游开发者的入门教程和参考。1. 2 阅读建议建议读者在阅读本教程之前,在Windows下搭建VS2008和Android的开发环境,其中安卓开发环境搭建可以参考:/ybgame/archive/2012/06/07/2540693.html 1. 3 文档版本该文档版本为测试版本,读者阅读过程中如果发现任何问题,请及时反馈更改。邮箱:ZhangQ 1. 4 版权介绍本文档中的资源大部分收集于互联网,仅供大家交流学习之用,请勿用于任何商业目的。2 创建Cocos2d-X项目2. 1 获取Cocos2d-XCocos2D-X下载链接:/ 2. 2 创建Win32项目在下载并解压完源码包之后,找到cocos2d-x 文件夹,点击“build-win32.bat”来编译整个项目,之后点“install-templates-msvc.bat”来安装wizard。bat脚本会自动对应vs2008或者2010。然后可以通过VS2008打开cocos2d-x/cocos2d-win32.vs2008.sln,我们可以从这看到库文件。右键点击“Solution cocos2d-win32.vc2008”,之后选择“Add-New Project”。选择“cocos2d-x - cocos2d-win32 Application”,命名为“Cocos2dxSimpleGame”,并使用默认的路径设置。备注:在win32&沃Phone接口,游戏的路径必须放于cocos2d-x的根目录下。点“OK-Next”,不勾选 Box2D,因为Cocos2dSimpleGame不使用物理系统。请确保“SimpleAudioEngine in CocosDenshion”是勾选的,之后点“Finished”。现在我们可以看到“Cocos2dSimpleGame.win32”已经创建好了,项目依赖于libcocos2d & libCocosDenshion这两个库,编译并运行,将会看到如下结果。 2. 3 程序入口工程中的AppDelegate是应用真正的入口,在这里有平台的适配参数,找到导演类,启动我们的场景。在AppDelegate除了构建函数和析构函数之外,就是处理(游戏)暂停和重新开始的函数,initInstance函数处理不同平台的问题,在applicationDidFinishLaunching中就是处理导演类和场景开始,然后是用摄像机的runWithScene开始场景。bool AppDelegate:applicationDidFinishLaunching() / initialize director CCDirector *pDirector = CCDirector:sharedDirector(); pDirector-setOpenGLView(CCEGLView:sharedOpenGLView(); / enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices./ pDirector-enableRetinaDisplay(true); / turn on display FPS pDirector-setDisplayStats(true); / set FPS. the default value is 1.0/60 if you dont call this pDirector-setAnimationInterval(1.0 / 60); / create a scene. its an autorelease object CCScene *pScene = HelloWorld:scene(); / run pDirector-runWithScene(pScene); return true;最后就是HelloWorldScene场景类,构建方法主要是建层等,关键的方法是init,主要是构建场景中的各种元素。 bool HelloWorld:init()if(! CCLayer:init() return false; bool bRet = false; do CC_BREAK_IF(! CCLayer:init(); / 1. Add a menu item with X image, which is clicked to quit the program. / Create a close menu item with close icon, its an auto release object.CCMenuItemImage *pCloseItem = CCMenuItemImage:create( CloseNormal.png, CloseSelected.png, this, menu_selector(HelloWorld:menuCloseCallback); CC_BREAK_IF(! pCloseItem); / Place the menu item bottom-right conner. pCloseItem-setPosition(ccp(CCDirector:sharedDirector()- getWinSize().width - 20, 20); / Create a menu with the close menu item, its an auto release object. CCMenu* pMenu = CCMenu:menuWithItems(pCloseItem, NULL); pMenu-setPosition(CCPointZero); CC_BREAK_IF(! pMenu); / Add the menu to HelloWorld layer as a child layer. this-addChild(pMenu, 1); / / 2. add your codes below. CCSize winSize = CCDirector:sharedDirector()-getWinSize(); CCSprite *player = CCSprite:spriteWithFile(Player.png, CCRectMake(0, 0, 27, 40) ); player-setPosition(ccp(player-getContentSize().width/2, winSize.height/2) ); this-addChild(player); bRet = true; while (0);this-schedule(schedule_selector(HelloWorld:gameLogic), 1.0);/ make touch enablethis-setTouchEnabled(true);return bRet;上述代码都很易懂,每次创建元素后将其使用this-addchild函数插入,即放入此场景,第二个参数就是绘制的顺序。其中构建关掉程序的方法中传入了menuCloseCallback回调方法,即是本类中的menuCloseCallback方法,这样就完成了第一个程序helloworld。2. 4 一些重要的概念在cocos2d引擎中,有几个概念,分别是导演,场景,布景和人物角色。导演(CCDirector)在cocos2d-x引擎中,导演类是游戏的组织者和领导者,导演制定规则让游戏内的场景,布景,和人物角色有序的运行。摄像机(CCCamera),每个节点都需要使用摄像机,当节点发生缩放,旋转,和位置变化时,都需要覆盖摄像机,让这个节点通过摄像机重新渲染。场景(CCScene)在游戏里,场景就是关卡,关卡有人物和背景构成。布景(CCLayer)从概念上说,布景就是场景里的背景,其实就是层次的概念,这种概念在kjava时代就有,就是手动的把游戏中的场景分层(也有靠地图编辑器实现这一功能的)。人物(CCSprite),这就很明显了,当然包括主角和敌人,和npc,以我个人的理解,也包括游戏中的动态大图素及机关等。动作(CCAction),就是人物(CCSprite)拥有的动作。2. 5 如何添加一个精灵(Sprite)打开新建工程中的HelloWorldScene.cpp,替换init方法如下所示: bool bRet = false; do CC_BREAK_IF(! CCLayer:init(); / 1. Add a menu item with X image, which is clicked to quit the program. / Create a close menu item with close icon, its an auto release object. CCMenuItemImage *pCloseItem = CCMenuItemImage:create( CloseNormal.png, CloseSelected.png, this, menu_selector(HelloWorld:menuCloseCallback); CC_BREAK_IF(! pCloseItem);/ Place the menu item bottom-right conner. pCloseItem-setPosition(ccp(CCDirector:sharedDirector()- getWinSize().width - 20, 20); / Create a menu with the close menu item, its an auto release object. CCMenu* pMenu = CCMenu:menuWithItems(pCloseItem, NULL); pMenu-setPosition(CCPointZero); CC_BREAK_IF(! pMenu); / Add the menu to HelloWorld layer as a child layer. this-addChild(pMenu, 1); CCSize winSize = CCDirector:sharedDirector()-getWinSize(); CCSprite *player = CCSprite:spriteWithFile(Player.png, CCRectMake(0, 0, 27, 40) ); player-setPosition( ccp(player-getContentSize().width/2, winSize.height/2) ); this-addChild(player); bRet = true; while (0);this-schedule(schedule_selector(HelloWorld:gameLogic), 1.0);/ make touch enablethis-setTouchEnabled(true);return bRet;其中Player.png即为加入的精灵图片。读者可以根据自己的需要放入一张图片到工程的资源文件夹下。要玩游戏的话,我们必须把背景改成白色的。这非常简单,修改HelloWorld类,使它继承CCLayerColor,而不是CCLayer。首先,修改HelloWorldScene.h的声明部分class HelloWorld : public cocos2d:CCLayerColor之后修改HelloWorld:init()内的初始部分if ( !CCLayer:init() ) return false;为如下代码:if ( !CCLayerColor:initWithColor( ccc4(255,255,255,255) ) ) return false;3 动作(Action)3. 1 定义动作CCActionInterval*actionTo = CCMoveTo:actionWithDuration(2,CCPointMake(s.width-40, s.height-40);3. 2 动作执行m_grossini = CCSprite:spriteWithFile(s_pPathGrossini);m_grossini-runAction( CCSequence:actions(actionBy, actionByBack, NULL);3. 3 相关例程 请读者在VS2008中查看Cocos2d工程的TestCpp中ActionTest下相关代码,该代码里面包含了常见的动作情形,结合实例进行学习。4 触屏事件4. 1 场景触屏一般在菜单中,不是继承自CCLayer,这时候要检测触屏,就需要两步就可以完成:第一步:setIsTouchEnabled(true);这句话在类初始化的时候加入第二步:重写相应的函数:ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent);/触屏开始事件ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent);/拖动事件ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent);/触屏结束事件需要在哪个消息上作处理,就重写哪个函数就可以,具体的重写方法,会在后面介绍。4. 2 布景触屏需要增加一步,即重写registerWithTouchDispatcher()函数,重写的方法如下:然后首先在层初始化的时候(onEnter)加入setIsTouchEnabled(true);然后重写相应的函数:重写函数时,需要获得坐标,获得坐标方式如下:在处理多点触摸时,首先获得集合中的第一个元素,然后获得屏幕上的坐标对应,最后对应openGL图标,在处理单点触摸时只需要两步就可以。5 动作管理5. 1 基本动作管理停止一个动作,开始下一个动作:其中在onEnter的最后一句话就是在1.4s后调用removeThis这个函数来进行把这一层删掉,并且开始下一层,可以看到,这个runAction是这个层对象调用的。回调函数处理精灵:动作挂起:以上函数可以实现一个动作挂起,如果再扩展,就可以实现动作冷却,通过调用schedule函数来实现在30s后通过CCActionManager开始动作(需要unschedule)。6 场景间切换效果Cocos2d-x提供了很多场景间切换的效果。使用方法:正常的无过渡场景的如果尚未建立场景,就是pDirector-runWithScene(pScene);即可以使用相应场景,如果是替换场景,则使用CCDirector:sharedDirector()-replaceScene(this);替换相应的场景即可,而如果要使用场景间的切换效果来切换场景,则需要使用相应的切换方法即transitionWithDuration(当然不同效果的使用方法略有不同)生成相应场景,然后再通CCDirector:sharedDirector()-replaceScene(this)来启动场景,也就是说这个给这个场景加了一个外包装,然后再启动,那么,这个场景就不是直接显示了,而是在场景的效果使用完了以后进入场景,起到过渡的效果。一般此函数有两个参数,第一个是特效的切换时间,直接生成一个CCTime即可,例子中设定的时间是1.2s,对于很多场景的显示都很舒服,第二个是要进入的场景,有的会有第三个参数,会在下面介绍。Cocos2d提供的场景切换效果列表如下:l CCTransitionJumpZoom:transitionWithDuration(t, s);/跳跃式,本场景先会缩小,然后跳跃进来l CCTransitionFade:transitionWithDuration(t, s);/淡出淡入,原场景淡出,新场景淡入l CCTransitionFade:transitionWithDuration(t, s, ccWHITE);/如果上一个的函数,带3个参数,则第三个参数就是淡出淡入的颜色l CCTransitionFlipX:transitionWithDuration(t, s, kOrientationLeftOver);/x轴左翻l CCTransitionFlipX:transitionWithDuration(t, s, kOrientationRightOver);/x轴右翻l CCTransitionFlipY:transitionWithDuration(t, s, kOrientationUpOver);/y轴上翻l CCTransitionFlipY:transitionWithDuration(t, s, kOrientationDownOver);/y轴下翻l CCTransitionFlipAngular:transitionWithDuration(t, s, kOrientationLeftOver);/有角度转的左翻l CCTransitionFlipAngular:transitionWithDuration(t, s, kOrientationRightOver);/有角度转的右翻l CCTransitionZoomFlipX:transitionWithDuration(t, s, kOrientationLeftOver);/带缩放效果x轴左翻;l CCTransitionZoomFlipX:transitionWithDuration(t, s, kOrientationRightOver);/带缩放效果x轴右翻l CCTransitionZoomFlipY:transitionWithDuration(t, s, kOrientationUpOver);/带缩放效果y轴上翻l CCTransitionZoomFlipY:transitionWithDuration(t, s, kOrientationDownOver);/带缩放效果y轴下翻 l CCTransitionZoomFlipAngular:transitionWithDuration(t, s, kOrientationLeftOver);/带缩放效果/有角度转的左翻l CCTransitionZoomFlipAngular:transitionWithDuration(t, s, kOrientationRightOver);/带缩放效果有角度转的右翻l CCTransitionShrinkGrow:transitionWithDuration(t, s);/交错换l CCTransitionRotoZoom:transitionWithDuration(t, s);/转角换;CCTransitionMoveInL:transitionWithDuration(t, s);/新场景从左移入覆盖l CCTransitionMoveInR:transitionWithDuration(t, s);/新场景从右移入覆盖l CCTransitionMoveInT:transitionWithDuration(t, s);/新场景从上移入覆盖l CCTransitionMoveInB:transitionWithDuration(t, s);/新场景从下移入覆盖l CCTransitionSlideInL:transitionWithDuration(t, s);/场景从左移入推出原场景l CCTransitionSlideInR:transitionWithDuration(t, s);/场景从右移入推出原场景l CCTransitionSlideInT:transitionWithDuration(t, s);/场景从上移入推出原场景l CCTransitionSlideInB:transitionWithDuration(t, s);/场景从下移入推出原场景l 以下三个需要检测opengl版本是否支持CCConfiguration:sharedConfiguration()-getGlesVersion() setDepthTest(true);l CCTransitionPageTurn:transitionWithDuration(t, s, false);/翻页,前翻l CCTransitionPageTurn:transitionWithDuration(t, s, true);/翻页,后翻l CCTransitionFadeTR:transitionWithDuration(t, s);/向右上波浪l CCTransitionFadeBL:transitionWithDuration(t, s);/向左下波浪l CCTransitionFadeUp:transitionWithDuration(t, s);/向上百叶窗l CCTransitionFadeDown:transitionWithDuration(t, s);/向下百叶窗l CCTransitionTurnOffTiles:transitionWithDuration(t, s);/随机小方块l CCTransitionSplitRows:transitionWithDuration(t, s);/按行切l CCTransitionSplitCols:transitionWithDuration(t, s);/按列切7 CCProgressTimer在cocos2d中同样提供了很多表现图片和精灵的方式,上部分当中提到的切换场景的方式之一是顺或逆时针切入的方法,在图片上也可以使用,TestCpp里例子介绍CCProgressTimer可以实现一些图片的特效效果,这样的效果可以在载入的时候作为载入动画。步骤1:定义CCProgressTo,通过actionWithDuration函数,第一个参数是时间是一个CCTime对象,第二个参数是结果显示图片的百分比,如例子中一个100%,一个50%步骤2:定义CCProgressTimer,通过progressWithFile,参数是图片路径步骤3:调用setType设置类型,kCCProgressTimerTypeRadialCW 顺时针生成kCCProgressTimerTypeRadialCCW 逆时针生成kCCProgressTimerTypeHorizontalBarLR 从左到右生成kCCProgressTimerTypeHorizontalBarRL 从右到左生成kCCProgressTimerTypeVerticalBarBT 从下到上生成kCCProgressTimerTypeVerticalBarTB 从上到下生成步骤4:设置位置,没什么好说的,直接setPosition步骤5:开始,使用CCRepeatForever(重复进行),传入CCProgressTo对象8 场景特效如何让场景中的所有都受一个动作特效的影响呢?可以使用树形结构,在场景中建立一个CCNode,然后将场景中会受特效影响的对象都挂在这个特效上就可以了,如下代码就做到了这点:可以看到,所有的对象都挂在了node上面,另外还要注意当特效动作结束后,将场景恢复正常,可以用挂schedule的方式,实时监测,如下:如代码中一样,如果动作结束,那就恢复相应的状态,将setGrid置空TestCpp中使用的场景特效如下:首先,使用ccg(x,y)建grid,一个Grid 属性就好像一个矩阵,是一个网络的线,组成一系列的方块和矩阵。 一个(16,12)大小的grid将会运行的非常快,但是并不会看起来非常的好。(32,24)的将会看起来非常棒,但是在iphone1代中,运行起来不会太快 。任何一个屏幕的Frame都会改称成一个Texture(FBO),这个纹理会转换城一个顶点array,这个顶点坐标array是通过grid的效果转换来的。最后,这个顶点数组被显示到屏幕上。 CCShaky3D:actionWithRange(5, true, ccg(15,10), t);/第一个参数是扭曲范围,第二个参数是是否扭曲z轴,分格的大小,第四个参数是间隔时间CCWaves3D:actionWithWaves(5, 40, ccg(20,10), t);/波浪式,5是波浪数,40是振幅CCFlipX3D:actionWithDuration(t);/x轴翻转CCFlipY3D:actionWithDuration(t);/y轴翻转CCLens3D:actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, ccg(15,10), t); /放大镜,参数是中心点,半径,格,时间CCRipple3D:actionWithPosition(CCPointMake(size.width/2,size.height/2), 240, 4, 160, ccg(32,24), t);/水波 参数是中心点,半径,波浪数,振幅,格,时间CCLiquid:actionWithWaves(4, 20, ccg(16,12), t);/流体效果,波浪数,振幅,格,时间CCWaves:actionWithWaves(4, 20, true, true, ccg(16,12), t);/扭曲波浪,波浪数,振幅,水平sin,竖直sin,格,时间CCTwirl:actionWithPosition(CCPointMake(size.width/2, size.height/2), 1, 2.5f, ccg(12,8), t); /扭曲,中心点,扭曲数,振幅,格,时间CCShakyTiles3D:actionWithRange(5, true, ccg(16,12), t) ;/水波,范围,是否z轴,格,时间CCShatteredTiles3D:actionWithRange(5, true, ccg(16,12), t);/破碎歪曲,范围,是否z轴,格,时间CCShuffleTiles:actionWithSeed(25, ccg(16,12), t);/打散CCFadeOutTRTiles:actionWithSize(ccg(16,12), t);/顶右淡出CCFadeOutBLTiles:actionWithSize(ccg(16,12), t);/底左淡出CCFadeOutUpTiles:actionWithSize(ccg(16,12), t);/向上淡出CCFadeOutDownTiles:actionWithSize(ccg(16,12), t);/向下淡出CCTurnOffTiles:actionWithSeed(25, ccg(48,32) , t);/方块消失CCWavesTiles3D:actionWithWaves(4, 120, ccg(15,10), t);/方块波浪CCJumpTiles3D:actionWithJumps(2, 30, ccg(15,10), t);/跳跃方块CCSplitRows:actionWithRows(9, t);/切开行CCSplitCols:actionWithCols(9, t);/切开列CCPageTurn3D:actionWithSize(ccg(15,10), t);/翻页9 粒子系统在游戏中,经常要实现一些真实的效果,这些效果(如,火焰,雪花等)都是由大量微粒组合而形成的。为了在游戏中实现这种效果,我们必须引进粒子系统,粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子状态。大量的粒子叠加就可以产生我们需要的特效。在cocos2d-x引擎中,粒子系统使用CCParticleSystem来表示,又分为两大类,重力式粒子系统CCParticleSystemPoint和放射式粒子系统CCParticleSystemQuad,两者在功能上略有不同,CCParticleSystemQuad支持围绕轴线旋转,CCParticleSystemQuad支持更多粒子对象和缩放,重力式故名思义,系统中存在重力,重力大小可以自己定义,包括的参数有:重心,速度,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,角加速度,线加速度,半径,分组模式(是否随重心移动),放射性系统恰恰相反,不存在重力,包括的参数有:重心,方向,尺寸,存在时间,颜色,绕自己轴心旋转角度,绕重心为轴心旋转角度,半径,分组模式(是否随重心移动)。过程分为以下几步:第一步 建立粒子系统m_emitter = new CCParticleSystemQuad();第二步 产生粒子对象m_emitter-initWithTotalParticles(50);第三步 设置参数/ radial半径m_emitter-setRadialAccel(-120);m_emitter-setRadialAccelVar(0);第四步 设置到背景上m_background-addChild(m_emitter, 10);另外引擎还支持一些粒子编辑工具另外引擎内还实现了一些自带粒子系统:CCParticleFire CCParticleFireworks CCParticleSun CCParticleGalaxy CCParticleFlower CCParticleMeteor CCParticleSpiral CCParticleExplosion CCParticleSmoke CCParticleSnow CCParticleRain基本使用方法类似:m_emitter = CCParticleFire:node();m_emitter-retain();m_background-addChild(m_emitter, 10);m_emitter-setTexture( CCTextureCache:sharedTextureCache()-addImage(s_fire) );/.pvr;CCPoint p = m_emitter-getPosition();m_emitter-setPosition( CCPointMake(p.x, 100) );10 运动中的加速度效果在实现运动中,我们常常需要实现一些加速度或者减速度的效果,cocos2d-x引擎为我们提供了相应的实现接口,这样我们就不用再用原来的公式计算方法来实现加减速度的效果Ease系列的方法改变了运动的速度,但是并没有改变总体时间,如果整个的action持续5秒钟,那么整个的时间仍然会持续5秒钟。 这些action可以被分成3类:In actions: action开始的时候加速Out actions: action结束的时候加速InOut actions: action开始,结束的时候加速第一个参数为要加减速度的动作,第二个为加减的速率还有一些特殊的缓冲公式继承了进来:指数缓冲:EaseExponentialInEaseExponentialOutEaseExponentialInOut赛因缓冲:EaseSineInEaseSineOutEaseSineInOut弹性缓冲:EaseElasticInEaseElasticOutEaseElasticInOut跳跃缓冲:EaseBounceInEaseBounceOutEaseBounceInOut回震缓冲:EaseBackInEaseBackOutEaseBackInOut另外还可以设置速度的倍数,过把动作定义为CCSpeed并改变速度,使用setSpeed将速度按参数的倍数变大或者缩小,这样可以手动实现加减速度。读者也可以参考网址:/Programming/net/201101/23779.htm11 拖动间隐效果在游戏的实现过程中,我们有时会需要在某个游戏对象上的运动轨迹上实现间隐效果,这种感觉就好像是类似飞机拉线似的拖尾巴,使我们的游戏在视觉上感觉很好,比如子弹的运动轨迹等等,cocos2d-x提供了一种内置的间隐效果拖尾的实现方法CCMotionStreak。第一步,定义MotionStreak, 当然是通过构造函数的方式来实现m_streak = CCMotionStreak:streakWithFade(3, 3, s_streak, 64, 32, ccc4(255,255,255,255) );第一个参数是间隐的时间,第二个参数是间隐片断的大小,第三个参数是贴图的路径,第四个参数是贴图的宽,第五个参数是贴图长,第六个参数是颜色值argb第二步,加入到场景中,这个很简单addChild第三步,设置位置,setPosition即可TestCpp中实现了记录鼠标拖动路径的效果:12 图形绘制Cocos2d-x封装了一些opengl的方法,用于绘制基本图形,TestCpp中有相应的例子。12. 1 画点该引擎中的点是方形的点,参数为点坐标,或者是点坐标数组。12. 2 画直线参数为起点和终点,可以设置线宽和画笔。12. 3 画圆参数为圆心,半径,角度,分段数(将圆微分为直线)。12. 4 画多边形参数为点数组,点数量,图形是否封闭。12. 5 画贝塞尔曲线第一个例子为一个控制点,第二个例子为两个控制点,最后一个参数为分段数。最后,要记得将opengl的值恢复,因为opengl是一个状态机。13 内存回收机制使用autorelease可以简化我们的内存管理,等于将我们的对象放入自动释放池,放入自动对象池的对象会记着你在晚些时候发送的释放信息,因为忘记释放内存有可能会导致内存泄露,当然这样做也有一个缺点,就是当下一帧我们需要再次使用这个对象的时候,我们就会发现我们的对象已经被释放了,就算你把对象作为成员变量,都无法保证不会出现这种错误,这时你有两种办法,第一种办法就是使用retain方法保留,第二种办法就是在addchild的时候,加上tag,然后再当我们需要的时候,我们就可以通过tag再次获得相应的对象即可。虽然苹果开发者文档建议较少的使用自动释放对象,但是这样做可以方便我们进行内存管理。与object c一样,cocos2d引擎对于内存管理有些约束,如果你拥有一些对象,你必须在用完之后释放他,如果你使用了autorelease你就不能使用release。使用自动释放的例子:使用释放的例子:使用保留的例子:14 菜单项Cocos2d-x的菜单中提供了多种菜单项的生成方式,他们都继承于MenuItem,如下图:14. 1 CCMenuItemLable包括CCMenuItemAtlasFont和CCMenuItemFont是两种定义菜单项字体的方式,其中CCMenuItemFont是通过设定字体名称来设置字体,这个字体是系统自带的,用法如下:主要就是设置字体和字号就可以了CCMenuItemAtlasFont则是通过字体配置文件png文件,即配置文件所对应的图片,用法如下也可以生成CCLabelAtlas,再以lable的形式放入CCMenuItem中,用法如下:另外还可以使用CCLabelBMFont,配置文件使用fnt格式的配置文件,用法如下:14. 2 CCMenuItemSprite这个菜单项的特点就是可以封装图片进入菜单项,用法如下:也有直接传入图片的路径的CCMenuItemImage:14. 3 CCMenuItemToggleCCMenuItemTog
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小动物的故事大会想象作文(14篇)
- 采购管理供应商评估筛选模板
- 一件难忘的校园事作文15篇范文
- 赤壁赋学习笔记:高中语文文言文知识梳理
- 税务筹划合规性自查与调整清单
- 口腔健康保健预案
- 制造企业绿色供应链建设规划
- 45001职业健康安全管理体系指南
- 新员工入职培训教材及考核卷
- 小学一年级语文期末试卷抉择题
- VTE防治护理手册
- 小儿支气管哮喘-羽课件
- 新北师大版二年级上册数学 课桌有多长 教学课件
- 管道沟槽开挖安全安全技术交底
- 案件(线索)移送登记表
- 2021年全国质量奖现场汇报材料课件
- 《组织学与胚胎学》课件02细胞
- 教师资格证-综合素质-学生观
- 名词性从句公开课
- 最新北师大版100以内加减法口算和竖式计算
- 《窗边的小豆豆》阅读分享
评论
0/150
提交评论