cocos2d-x之核心类
2016-04-06 11:01
357 查看
核心类
(1)导演类(director):
一、概念: 导演类是游戏引擎的核心,用来创建和控制主屏幕的显示,同时控制场景的显示时间和显示方式。只有一个导演,游戏的开始结束暂停都会调用导演类中的方法
二、作用:
a、初始化OpenGL会话
三、相关代码:
//获得导演
auto director =
Director::getInstance();
//设置OpenGL视图
auto glview = director->getOpenGLView();
//设置是否显示每帧时间
director->setDisplayStats(true);//左下角数据是否显示bools
//设置每帧时间
director->setAnimationInterval(1.0 /60);//帧率
//创建场景
auto scene =
HelloWorld::createScene();//得到场景
//运行场景
director->runWithScene(scene);//跑起第一个场景
(2)场景类(Scene):
场景类(Scene)
一、概念: 场景类 是节点类的子类,拥有自己的锚点
二、作用:场景是显示在屏幕上的最底层的一个舞台,所有我们能看到的显示在 屏幕上的东西都是被搭建在这个场景上的。同一时间,只能有一个场景在运行。 箱子
三、相关代码:
GameScene.h
#include <iostream>
using namespace std;
#include "cocos2d.h"
using namespace cocos2d;
class GameScene:public Layer
{
public:
static Scene* createScene();
CREATE_FUNC(GameScene);
bool init();
};
GameScene.cpp
Scene*
GameScene::createScene()
{
//新建场景类实例
auto scene =
Scene::create();
//定义布景层
auto layer =
HelloWorld::create();
//将布景层加入场景
scene->addChild(layer);
//返回场景类
return scene;
}
bool GameScene::init()//大量控件写在这里,会出现峰值
{
if(!Layer::init())//初始化从父类继承的数据
{
return
false;
}
return true;
}
//场景切换
auto d=Director::getInstance();
d->replaceScene(GameScene::
4000
createScene());//场景切换,d第一个场景销毁
// d->pushScene(GameScene::createScene());//第一个场景入栈
Size size=d->getWinSize();//获取屏幕大小
log("%f,%f",size.width,size.height);
//游戏暂停和恢复
// d->pause();
// d->resume();
// d->end();//游戏结束
(3)布景层类(Layer):层就像一个个的透明的薄膜一样可以被铺在场景上,虽然同一时 刻只能有一个场景在运行,但是这个场景上可以有多个层。这些层相互独立的,互不 影响 。玻璃
一、概念: 布景层类是Node的子类,在此基础上实现触屏事件代理协议,可以处理输入、包括触屏和加速度传感器
二、作用:
三、相关代码:
CCLayer类的函数
(4)精灵(Sprite):精灵是真正的可以被我们看见的东西,我们现在可以狭隘的理解为 它是一张真正能被看见的显示在手机屏幕上的一张图片 。画
相关代码:
// add "HelloWorld" splash screen"
auto sprite =
Sprite::create("HelloWorld.png");
// position the sprite on the center of the screen
sprite->setPosition(Vec2(100,100));
// add the sprite as a child to this layer
this->addChild(sprite,0);
!!!!精灵创建的方式:
一、根据图片路径来创建
auto sprite1=Sprite::create("1.png");
二、根据精灵帧来创建
SpriteFrame* f;
auto sprite2=Sprite::createWithSpriteFrame(f);
三、根据纹理来创建
auto sprite3=Sprite::createWithTexture(<#cocos2d::Texture2D *texture#>)
(5)节点(Node):所有展现在屏幕上的类都是节点或节点的子类。节点的属性:-有自己的子节点,可以一个或多个
-只能有一个父节点
- 可以设置自己的位置
-可以有自己的名字
-可以有自己的标签
-可以设置自己的旋转角度
4、搭建场景
auto myScene=Scene::create();
auto myLayer=Layer::create();
auto sprite=Sprite::create("HelloWorld.png");
myScene->addChild(myLayer);
myLayer->addChild(sprite);
director->runWithScene(myScene);
//将精灵加到层上,将层加到场景上
5、UI坐标系:左下角
锚点的概念:锚点就是一个节点的中心点,默认值是(0.5,0.5)
6、节点
用于标识节点的:
virtual void setTag(int tag);
virtual int getTag() const;
virtual void setName(const std::string&
name);
virtual std::string getName() const;
关于节点位置的:
virtual void setAnchorPoint(const Vec2& anchorPoint);
virtual const Vec2& getAnchorPoint() const;
virtual void setPosition(const Vec2 &position);
virtual const Vec2& getPosition() const;
virtual void<
ab9b
/span> setLocalZOrder(int localZOrder);
virtual int getLocalZOrder()
关于节点尺寸和变形的:
virtual void setContentSize(const Size& contentSize);
virtual const Size& getContentSize() const;
virtual void setScale(float scale);
virtual float getScale() const;
virtual float getRotation() const;
virtual void setRotation(float rotation);
关于节点是否可见的:
virtual void setVisible(bool visible);
virtual bool isVisible() const;
关于增加子节点的:
virtual void addChild(Node * child);
virtual void addChild(Node * child, int localZOrder);
virtual void addChild(Node* child, int localZOrder, int tag);
virtual void addChild(Node* child, int localZOrder, const
std::string &name);
关于对父节点的:
virtual const Node* getParent() const
virtual void removeFromParent();
关于得到子节点的:
virtual Node * getChildByTag(int tag) const;
virtual Node* getChildByName(const std::string&
name) const;
关于移除子节点的:
virtual void removeChild(Node* child, bool cleanup
= true);
virtual void removeChildByTag(int tag, bool cleanup
= true);
virtual void removeChildByName(const std::string &name, bool cleanup
= true);
virtual void removeAllChildren();
(1)导演类(director):
一、概念: 导演类是游戏引擎的核心,用来创建和控制主屏幕的显示,同时控制场景的显示时间和显示方式。只有一个导演,游戏的开始结束暂停都会调用导演类中的方法
二、作用:
a、初始化OpenGL会话
b、设置OpenGL的一些参数和方式 c、访问和改变场景以及访问Cocos2D-X的配置细节 d、访问视图 e、设置投影和朝向 |
//获得导演
auto director =
Director::getInstance();
//设置OpenGL视图
auto glview = director->getOpenGLView();
//设置是否显示每帧时间
director->setDisplayStats(true);//左下角数据是否显示bools
//设置每帧时间
director->setAnimationInterval(1.0 /60);//帧率
//创建场景
auto scene =
HelloWorld::createScene();//得到场景
//运行场景
director->runWithScene(scene);//跑起第一个场景
(2)场景类(Scene):
场景类(Scene)
一、概念: 场景类 是节点类的子类,拥有自己的锚点
二、作用:场景是显示在屏幕上的最底层的一个舞台,所有我们能看到的显示在 屏幕上的东西都是被搭建在这个场景上的。同一时间,只能有一个场景在运行。 箱子
三、相关代码:
GameScene.h
#include <iostream>
using namespace std;
#include "cocos2d.h"
using namespace cocos2d;
class GameScene:public Layer
{
public:
static Scene* createScene();
CREATE_FUNC(GameScene);
bool init();
};
GameScene.cpp
Scene*
GameScene::createScene()
{
//新建场景类实例
auto scene =
Scene::create();
//定义布景层
auto layer =
HelloWorld::create();
//将布景层加入场景
scene->addChild(layer);
//返回场景类
return scene;
}
bool GameScene::init()//大量控件写在这里,会出现峰值
{
if(!Layer::init())//初始化从父类继承的数据
{
return
false;
}
return true;
}
//场景切换
auto d=Director::getInstance();
d->replaceScene(GameScene::
4000
createScene());//场景切换,d第一个场景销毁
// d->pushScene(GameScene::createScene());//第一个场景入栈
Size size=d->getWinSize();//获取屏幕大小
log("%f,%f",size.width,size.height);
//游戏暂停和恢复
// d->pause();
// d->resume();
// d->end();//游戏结束
(3)布景层类(Layer):层就像一个个的透明的薄膜一样可以被铺在场景上,虽然同一时 刻只能有一个场景在运行,但是这个场景上可以有多个层。这些层相互独立的,互不 影响 。玻璃
一、概念: 布景层类是Node的子类,在此基础上实现触屏事件代理协议,可以处理输入、包括触屏和加速度传感器
二、作用:
三、相关代码:
CCLayer类的函数
函数名 | 返回类型 | 描述 |
init | 布尔型 | 初始化CCLayer |
onEnter | 空 | 当进入布景层时被调用 |
onExit | 空 | 当离开布景层时被调用 |
onEnterTransitionDidFinsh | 空 | 过场动画结束时被调用 |
ccTouchBegan | 布尔型 | 触屏触摸屏幕 |
ccTouchMoved | 空 | 触屏移动 |
ccTouchEnded | 空 | 触屏结束 |
ccTouchCancelled | 空 | 触屏取消 |
ccTouchesBegan | 空 | 触屏触摸屏幕(多点触摸) |
ccTouchesMoved | 空 | 触屏移动(多点触摸) |
ccTouchedEnded | 空 | 触屏结束(多点触摸) |
didAccelerate | 空 | 加速度传感器 |
registerWithTouchDispatcher | 空 | 如果触屏允许,这个方法在init里调用 |
isTouchEnabled | 布尔型 | 获得是否触屏 |
setTouchEnabled | 空 | 设置触屏 |
isAccelerometerEnable | 布尔型 | 是否获得加速度传感器 |
setAccelerometerEnable | 空 | 设置获得加速传感器 |
isKeypadEnable | 布尔型 | 是否获得键盘事件 |
setKeypadEnable | 空 | 设置获得键盘事件 |
(4)精灵(Sprite):精灵是真正的可以被我们看见的东西,我们现在可以狭隘的理解为 它是一张真正能被看见的显示在手机屏幕上的一张图片 。画
相关代码:
// add "HelloWorld" splash screen"
auto sprite =
Sprite::create("HelloWorld.png");
// position the sprite on the center of the screen
sprite->setPosition(Vec2(100,100));
// add the sprite as a child to this layer
this->addChild(sprite,0);
!!!!精灵创建的方式:
一、根据图片路径来创建
auto sprite1=Sprite::create("1.png");
二、根据精灵帧来创建
SpriteFrame* f;
auto sprite2=Sprite::createWithSpriteFrame(f);
三、根据纹理来创建
auto sprite3=Sprite::createWithTexture(<#cocos2d::Texture2D *texture#>)
(5)节点(Node):所有展现在屏幕上的类都是节点或节点的子类。节点的属性:-有自己的子节点,可以一个或多个
-只能有一个父节点
- 可以设置自己的位置
-可以有自己的名字
-可以有自己的标签
-可以设置自己的旋转角度
4、搭建场景
auto myScene=Scene::create();
auto myLayer=Layer::create();
auto sprite=Sprite::create("HelloWorld.png");
myScene->addChild(myLayer);
myLayer->addChild(sprite);
director->runWithScene(myScene);
//将精灵加到层上,将层加到场景上
5、UI坐标系:左下角
OpenGL坐标系:原点在屏幕左下角,x轴向右,y轴向上为正 世界坐标系:也叫绝对坐标系,是游戏开发中建立的概念。 节点坐标系:都是相对父节点的坐标 |
6、节点
用于标识节点的:
virtual void setTag(int tag);
virtual int getTag() const;
virtual void setName(const std::string&
name);
virtual std::string getName() const;
关于节点位置的:
virtual void setAnchorPoint(const Vec2& anchorPoint);
virtual const Vec2& getAnchorPoint() const;
virtual void setPosition(const Vec2 &position);
virtual const Vec2& getPosition() const;
virtual void<
ab9b
/span> setLocalZOrder(int localZOrder);
virtual int getLocalZOrder()
关于节点尺寸和变形的:
virtual void setContentSize(const Size& contentSize);
virtual const Size& getContentSize() const;
virtual void setScale(float scale);
virtual float getScale() const;
virtual float getRotation() const;
virtual void setRotation(float rotation);
关于节点是否可见的:
virtual void setVisible(bool visible);
virtual bool isVisible() const;
关于增加子节点的:
virtual void addChild(Node * child);
virtual void addChild(Node * child, int localZOrder);
virtual void addChild(Node* child, int localZOrder, int tag);
virtual void addChild(Node* child, int localZOrder, const
std::string &name);
关于对父节点的:
virtual const Node* getParent() const
virtual void removeFromParent();
关于得到子节点的:
virtual Node * getChildByTag(int tag) const;
virtual Node* getChildByName(const std::string&
name) const;
关于移除子节点的:
virtual void removeChild(Node* child, bool cleanup
= true);
virtual void removeChildByTag(int tag, bool cleanup
= true);
virtual void removeChildByName(const std::string &name, bool cleanup
= true);
virtual void removeAllChildren();
相关文章推荐
- cocos2d-x之环境搭建
- cocos2dx+lua注册事件函数详解
- 关于cocos2dx手游lua文件加密的解决方式
- cocos2d-x 通过JNI实现c/c++和Android的java层函数互调
- cocos2d-x中有一个JniHelper类详细使用
- cocos2d-x 添加 libLocalStorage 库...
- Cocos2d-x 3.10 环境搭建
- 自绘控件及cocoapods推送过程
- cocos2d-x 2.2.3 win32程序发布注意
- cocos2dx 3.3 pluginx tools文件夹分析
- cocos2d-js:多层暂停指定层动画解决方案
- 获取Cocos Studio 2.X生成资源的子孙节点的方法
- cocos2d android分析之-libcocos2dlua.so库
- 关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法
- 关于cocos环境搭建
- Cocos2d-x lua 使用Cocos Studio导出的动画
- cocos2d-x 3.x 物理碰撞机制
- cocos2dx android.mk
- Cocos2d-x:3.0和2.0之间的区别
- cocos2dx 运动+旋转动画 CCSequence CCAnimation CCAnimate CCMoveTo CCCallFuncN