文章标题

来源:互联网 发布:js email正则表达式 编辑:程序博客网 时间:2024/06/02 00:56

学习笔记_2015.11.10

cocos2d-x学习
导演(Director)
场景(Scene)
布景层(Layer)
节点(Node)

坐标系的概念

OpenGL坐标系:原点在屏幕左下角,X轴正方向向右,Y轴正方向向上
世界坐标系:绝对坐标系,全局坐标概念
节点坐标系:是和特定节点相关联的坐标系
convertToWorldSpace:本地坐标系->世界坐标系
convertToNodeSpace:世界坐标系->本地坐标系

锚点:指定了贴图上和所在节点原点重合的点的位置。默认值(0.5,0.5)
仿射变换:在线性变换的基础上加上平移(旋转,缩放,平移)

Cocos2D-X 渲染
渲染顺序如下:
1.主线程调用drawScene开始绘制场景
2.递归的遍历场景的子节点,及调用visit函数
3.调用每个节点的绘制函数draw函数
4.初始化渲染命令会把这个对象(即QuadCommand对象)放进渲染队列里
渲染逻辑:首先进一步处理渲染命令,包括自动裁剪和自动批处理,处理完成后执行渲染命令

节点类(Node)

任何需要画在屏幕上的对象都是节点类;
最常用的节点类:场景类(Scenee)、布景类(Layer)、精灵类(Sprite)、菜单类(Menu)

一个类继承自Node类,有如下特点
1.重写初始化的方法和周期性回调方法
2.在时间线上控制回调
3.重写渲染的绘制方法

导演类(Director)

主要负责的功能:
1.初始化OpenGL会话
2.设置OpenGL的一些参数和方式
3.访问和改变场景,并访问Cocos2D-x的配置细节
4.访问视图
5.设置投影和朝向

Director是单例模式 Director::getInstance()->函数名

场景类(Scene)

是Node的子类,拥有自己的锚点,位置在屏幕的正中央,是一个抽象的概念。
Node
|
Scene
|
Transition

场景的切换
1.调用Director::getInstance()->purgeCachedData()清空缓存
2.新建新场景
3.调用Director::getInstance()->replaceScene(this)替换新场景
注意:不要在节点初始化的init函数中调用replaceScene函数!

场景间切换的动画
1.新建场景
2.根据需要的新建场景的切换动画选择TranstionScene子类,通过create将之前建的场景传入其中,并设置其他的参数
3.调用Director::getInstance()->replaceScene(用上一步中定义的TransitionScene的子类)替换新的场景

布景层的类(Layer)

每个游戏中可以有很多层,每一层负责各自的任务
Node
|
Layer

Layer的子类及其功能:

LayerCrolor 实现CCRGBAProtocol协议,可设置层的颜色和不透明度
MultipleLayer 他可以将他和子布景层结合在一起
Menu 菜单布景层
Control UI控件,(这套UI系统已废弃)
ScrollView 支持Cocos2S-iPhone的滚动视图

图形绘制类

时间调度的使用

// schedule 的使用
schedule(schedule_selector(SchedulerAutoremove::autoremove), 0.5f);

// unschedule 的使用
unschedule(schedule_selector(SchedulerAutoremove::autoremove));

// 暂停 schedule
_pausedTargets = director->getScheduler()->pauseAllTargets();

// 重新启动 schedule
director->getScheduler()->resumeTargets(_pausedTargets);

// 使所有的schedule停止
unscheduleAllSelectors();

// 使用scheduleUpdate,会在0.01秒左右调用一次update方法,需要重载update方法。
scheduleUpdate();

Ref类和内存管理

retain、release、autorelease

采用引用计数的的方式管理内存,当创建一个新对象的时候,内存计数计为1,每次进行retain保留操作的时候,内存计数加1,每次进行release释放操作的时候,内存计数减1.

内存管理的4个原则:
1.谁创建,谁释放。
2.谁需要保留谁释放。
3.传递赋值时,需要先retain形参,后release原指针,最后赋值。
4.自动释放池PoolManager。

精灵类(Sprite)

精灵类Sprite是一张二维的图片对象,他可以用一张图片或者一张图片的一块矩形部分来定义。

贴图类 (Texture2D)

精灵批处理类(SpriteBatchNode)

精灵帧类(SpriteFrame)

精灵帧缓存类(SpriteFrameCache)
用来存储精灵帧,提前缓存起来有助于程序的效率。
SpriteFrameCache是一个单例模式,是所有精灵共享使用的。

九宫格精灵 (Scale9Sprite)

0 0