cocos2d-x游戏开发的基本构成
在游戏开发中,具备的元素主要有导演、场景、布景(层)、人物角色以及动作。
- 导演(对应的类是CCDirector),导演负责整个游戏的组织与指挥,制定游戏中所有的规则,让游戏内的场景、布景和任务有序地运作;
- 场景(对应的类是CCScene),游戏中一个个的关卡就是场景,场景主要由布景和任务角色组成;
- 布景(CCLayer),布景就相当于是一个游戏背景背景,或理解为一个层,游戏中一个场景可能会有多个布景;
- 人物角色(CCSprite),也包括游戏中的各种物品,俗称精灵;
- 动作(CCAction),人物或者游戏中的各种“物品”都可能有自己的动作,这样游戏才有互动,才显得真实。
在cocos2d-x的源码中,各方法都有详细的注释(比AndEngine好多了)。
同样,我们可以在源码的document目录中,通过doxygen软件,导出帮助文档,方便随时查阅:
cocos2d-x的坐标体系
常用的几种坐标系
(1)屏幕坐标系 原点在左上角,X轴向右,Y轴向下。
(2)GL坐标系 原点在左下角,X轴向右,Y轴向上。
(3)世界坐标系 指相对于整个屏幕的坐标系,(0,0)就是屏幕的左下角,(320,480)就是屏幕的右上角。
(4)本地坐标系 相对于父对象的坐标
日常中,接触的最多的就是屏幕坐标系了,但在游戏开发中,因为用到openGL的技术比较多,所以GL坐标系用得比较多,如CCNode的setPosition函数以及CCTouch中的坐标参数,用的就是GL坐标系。
cocos2d-x中的锚点(anchor point)
锚点是个比较重要的概念,举个通俗的例子,就是一个参考坐标点,如用一枚钉子把一副画订在墙上,这幅画的旋转就会根据这枚钉子来转,这枚钉子就是个锚点。
cocos2d-x中的图形
游戏中的每一个元素都是图形,包括了菜单、图片、标签、人物、道具等等
(1)标签(CCLabelTTF)在游戏中显示一段文字,如:
CCLabelTTF *label = CCLabelTTF::labelWithString("测试", "Arial", 28); this.addChild(label);
(2)图片/精灵(CCSprite),如:
// add "HelloWorld" splash screen" CCSprite* pSprite = CCSprite::create("HelloWorld.png"); // position the sprite on the center of the screen pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(pSprite, 0);(3)菜单(CCMenu)及菜单项(CCMenuItem),主要包括标签式菜单(CCMenuItemLabel)、图片菜单项(CCMenuItemImage)、组合开关式(CCMenuItemToggle)
/ // 2. add a menu item with "X" image, which is clicked to quit the program // you may modify it. // add a "close" icon to exit the progress. it's an autorelease object CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2)); // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1);
cocos2d-x中的动作
动作(CCAction)定义了在节点上进行的通用操作,它不依赖于节点,但是在运行时需要指定节点为目标。
cocos2d-x中的动作主要分为两大类:瞬时动作(CCActionInstant)和延时动作(CCActionInterval)。
- 瞬时动作。主要特点是动作的执行不需花费时间,马上就能完成动作的执行。
瞬时动作名称 | 描述 |
CCCallFunc | 执行函数 |
CCFlipX | X轴翻转 |
CCFlipY | Y轴翻转 |
CCHide | 隐藏 |
CCPlace | 设置位置 |
CCReuseGrid | 重用网格 |
CCShow | 显示 |
CCStopGrid | 停止网格 |
CCToggleVisibility | 可见切换 |
- 延时动作。主要特点是动作的执行需要花费时间。
延时动作名称 | 描述 |
| 延时动作名称 | 描述 |
CCBezierBy | 执行贝塞尔曲线 |
| CCMoveTo | 移动到 |
CCBlink | 闪烁 |
| CCMoveBy | 移动 |
CCDelayTime | 延迟 |
| CCRotateTo | 旋转到 |
CCFadeTo | 变暗到 |
| CCRotateBy | 旋转 |
CCFadeIn | 由无变亮 |
| CCScaleTo | 放大到 |
CCFadeOut | 由亮变无 |
| CCScaleBy | 放大 |
CCJumpTo | 跳跃到 |
| CCTintTo | 色调变化到 |
CCJumpBy | 跳跃 |
| CCTintBy | 色调变化 |
CCSequence | 动作序列 |
| CCSplitRows | 拆分行 |
CCSpawn | 同步 |
| CCSplitCols | 拆分列 |
CCReverse | 动作逆向 |
| CCRepeat | 重复 |
CCReverseTime | 时间逆向 |
| CCRepeatForever | 无线重复 |
CCAnimate | 动画 |
|
cocos2d-x中的事件
cocos2d-x中支持3中事件派发,分别是CCKeypadDispatcher、CCIMEDispatcher以及CCTouchDispatcher,分别响应手机键盘、虚拟键盘以及触摸屏事件。
cocos2d-x中变量的自动释放
学过C++和Java/C#的人大多都认为C++要比较难一些,尤其是在变量的内存管理上,要复杂得多。通常C++中的变量都需要手动进行内存释放,否则会出现内存泄露的问题。
cocos2d-x由于是从cocos2d移植而来,同样参照了Objective-c的一些机制,比如retain机制及autorelease机制,使我们更方便简单的管理内存。
cocos2d-x中,几乎所有的类都继承自CCObject类,帮我们封装了变量释放的方法。