本篇目标:掌握渲染框架核心类Director、Scene、Layer、Sprite的基本属性和常用方法。
渲染框架核心类包括:Director、Scene、Layer、Sprite。Director对象在整个引擎中只有一个;Scene场景是有限的状态机,无论游戏中有多少状态,只有一个当前的状态在运行中,Scene为整个引擎中其他Node节点的容器;Layer为Sprite的容器。
1、摄像机类(Camera):主要借助OpenGL中的gluLookAt()方法来定位摄像机和物体之间的关系。注意事项包括:1、特殊的Node对象无法使用,比如ParallaxNode、Particle依据的是世界坐标系;2当Sprite来自SpriteBatchNode时无法使用。
2、导演类(Director):引擎渲染框架的指挥者。主要作用:保存引擎中全局配置;管理游戏场景,方法有:runWithScene、pushScene、popScene、popToRootScene、replaceScene、end、pause、resume、drawScene等方法;负责与渲染器OpenGLES保持联系;反馈来自操作系统的应用响应。比如暂停、恢复和结束游戏;在引擎世界和OpenGL之间进行转换坐标。
3、场景类(Scene):不包括任何游戏逻辑,仅仅做为一个容器,将不同的层组合到一起,最终呈现给玩家一个画面。游戏中常用的场景包括:显示类场景;选项类场景;游戏内容场景。
场景特效:
场景转换特效: | 说明 |
TransitiongFade | 淡进淡出 |
TransitionFaddBL | 从右上开始的图块反转效果 |
TransitionFaddTR | 从左下开始的图块反转效果 |
TransitionTurnOffTiles | 图块关闭 |
TransitionJumpZoom | 跳出缩小效果 |
TransitionMoveInl | 从左侧移除 |
TransitionPageTurn | 翻页 |
TransitionRadial | 雷达转针效果(逆时针) |
TransitionRotoZoom | 旋转缩小 |
TransitionShrinkGrow | 变大效果 |
TransitionSlideInl | 从左侧推动 |
TransitionCrossFade | 交叉淡进淡出 |
TransitionRadialCW | 雷达转针效果(顺时针) |
TransitionPageForwar | 前翻页效果 |
TransitionPageBackward | 后翻页效果 |
4、层(Layer):主要用于划分游戏画面,层的主要功能包括:1、接受用户操作,比如触屏、重力加速度计的信息。2、做为游戏内容元素的容器,用于显示游戏画面、承载精灵类、字体文本等对象。3、填充游戏背景颜色。Layer子类有:1、LayerColor及其子类LayerGradient;2、Menu菜单图层及MenuItem及它子类;3、MultiplexLayer复合层(不推荐使用)。Layer是Sprite的载体,在Scene中通过组合不同的Layer显示出多彩的效果。
5、精灵(Sprite):Sprite继承自Node、TextureProtocol、RGBAProtocol。在游戏实现中起到灵魂的作用,通过Spirte的绘制可以创造出各种各样的精彩游戏。精灵属性包括:
精灵属性 |
|
Glubyte m_nOpacity | 透明度、 |
ccColor3B m_sColor | 颜色值、 |
TextureAltas* m_pobTextureAtlas | 纹理图集、 |
unsigned int m_uAtlasIndex | 纹理图集序号、 |
SpriteBatchNode* m_pobBatchNode | 精灵集合对象指针、 |
bool m_bDirty | 是否重新绘制、 |
bool m_bRecursiveDirty | 是否递归重新绘制、 |
bool m_bHasChildren | 是否拥有子节点、 |
bool m_bShouldBeHidden | 是否隐藏、 |
CCAffineTransform m_transformToBatch | 精灵集合转换坐标、 |
ccBlendfunc m_sBlendFunc | 混合属性 |
Texture2D* m_pobTexture | 精灵纹理 |
Rect m_obRect | 矩形碰撞 |
bool m_bRectRotated | 矩形是否旋转 |
Point m_obOffsetPosition | 偏移坐标、 |
m_obUnflippedOffsetPositionFromCenter | 偏移坐标、 |
bool m_bflipX | X轴是否反转、 |
bool m_bflipY | Y轴是否反转。 |
6.30总结:渲染框架的核心:Director、Scene、Layer、Sprite等组合成整个引擎的精髓,开发者基于此框架完成游戏逻辑的填充。引擎启动后获取到Director对象,执行runScene后,整个游戏就启动了。通过Sprite的绘制实现每个Layer的效果,通过多个Layer组合游戏画面,对Scene填充Layer,至此完成整个游戏的管理。
SpriteBatchNode类:继承Node和TextureProtocol类。其子类包括:LabelBMFont和TMXLayer。限制条件:1、只能接受精灵对象为子节点。2、所有的精灵对象必须使用同一张纹理图片。使用场景:1、需要显示两个或者更多个相同的精灵对象时使用,节点越多,节省的效率越大。2、当在同一个场景中存在很多独立的精灵对象时,可以将他们整理为一张纹理。缺点:1、所有的子节点处于同一个画面层次,无法添加其他精灵。2、系统平台通常对纹理图片的尺寸限制。
static SpriteBatchNode * create(Texture2D* tex,unsigned int capacity=29)
static SpriteBatchNode * create(const char* fileImage,unsigned int capacity=29)
SpriteFrameCache和SpriteFrame特点:1、SpriteFrmae继承Ref类,不是继承Node类,所以无法绘制,不能加入到节点链表中。2、持有一个纹理对象,对精灵对象动画提供支持,SpriteFrame使得纹理载入内存和生成精灵对象分离,使得对精灵控制更加自由,对内存管理控制更好。3、支持从配置文件中加载。