您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x之核心类

2016-04-06 11:01 357 查看
核心类

(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轴向上为正

世界坐标系:也叫绝对坐标系,是游戏开发中建立的概念。

节点坐标系:都是相对父节点的坐标

锚点的概念:锚点就是一个节点的中心点,默认值是(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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: