导演类(CCDirector)---- 制定游戏的运行规则,让场景、布景、人物精灵有序进行。
场景类(CCScene) ---- 是一个关卡
布景类(CCLayer) ---- 是关卡里的背景,不同的关卡(场景)需要不同的背景(布景),一个场景可有包含多个布景层。
人物精灵(CCSprite)---- 游戏中的角色,如玩家控制的、敌人、NPC。
1.节点类
节点类(CCNode)是场景、布景层、人物精灵的基类。
最常用的节点类包括 --- 场景类(CCScene)、布景层类(CCLayer)、人物精灵类(CCSprite)、菜单类(CCMenu)
一般使用节点类(CCNode)的场合有两个:
1)需要一个父节点来管理一批子节点
2)自定义一个在屏幕上显示的对象,让新定义的这个类继承自CCNode
V2.0版本之后,使用create函数进行创建。
1.1 坐标系
屏幕坐标系中,原点在屏幕左上角,x轴向右,y轴向下。
世界坐标系与OpenGL坐标系方向一致。
CCNode类设置位置使用的坐标系方向和OpenGL方向一致。
1.2 仿身变换
指在线性变换的基础上加上平移,比如游戏中使用的旋转、缩放、平移都是仿射变换。
2.实验--通过节点来控制屏幕中的对象
新建一个HelloWorld项目,编译一下,
在windows平台中文件的执行顺序是main入口-----AppDelegate入口----HelloWorldScene场景,
打开HelloWorldScene.cpp文件,在init中做如下两个实验:
实验1:
// add your codes below... 在这个注释下面添加和修改代码
// Step1:将新创建的节点当作子节点加入到HelloWorld场景类中
//创建一个节点
CCNode *anode = CCNode::create();
//将节点作为子节点加入场景类中
this->addChild(anode,0);
// Step2:将原本作为子节点的加入HelloWorld场景中的对象,使用addChild函数作为子节点添加到anode中
//this->addChild(pMenu, 1);
anode->addChild(pMenu,1);
//this->addChild(pLabel, 1);
anode->addChild(pLabel,1);
//this->addChild(pSprite, 0);
anode->addChild(pSprite,0);
// Step3:运行项目,发现和修改前没有区别。
实验2 设置节点的位置
在 bRet = true;的前面,加上一句
anode->setPosition(ccp(100,50));
再编译运行一下:
实验3 设置缩放
anode->setScale(0.8);
实验4 整体旋转
在main.cpp中可以看到,当前我这个窗口大小是480 * 320 (eglView->setFrameSize(480, 320);),将锚点移动一下,移到左上角(x=0, y=max)
anode->setPosition(ccp(0,320));
anode->setRotation(90);
效果如下