cocos2dx中的核心类是什么

技术cocos2dx中的核心类是什么今天就跟大家聊聊有关cocos2dx中的核心类是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、节点类(Node)

今天,我将和大家谈谈cocos2dx中的核心类是什么。可能很多人不太了解。为了让大家更加了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

一、节点类(节点)

要在屏幕上显示的任何对象都是节点类,其中最常见的是场景、图层、菜单子画面。菜单类是图层的子类,图层的默认初始化锚点为(0,0),sprite的默认锚点为(0.5,0.5)。图层或向导在其父类setposition()函数上的位置实际上是指锚点的位置。节点的旋转、缩放和平移动作都是基于锚点的。

二、导演班(导演)

Director类是cocos2D-x游戏引擎的核心,用于创建和控制主屏幕的显示,在游戏开始、结束和暂停时调用Director类的方法,调用Director中标准方式的方法,Director :3360 getinstance()-函数名。

这些指导方法更重要。

场景* GetRunningSine();获取当前运行的场景。注意:导演类一次只能移动一个场景void runWithScene(场景*场景);通过传入的参数场景进入导演的主循环。

void replaceScene(场景*场景);切换场景

void end();结束游戏

三、场景类

场景有一个子类CCTransitionScene切换类。这个类有很多子类,也就是切换场景的方式很多。所有这些类都是因为当director :3360 getinstance()-replay scene()方法运行时,会出现内存“峰值”,新场景还没有发布。旧场景进来了,这两个占据的记忆之和就是这个“巅峰”。这时手机上会有卡片,切换场景类相当于阅读进度条。

切换场景的类型很多,也就是形式很多。以下是翻页的例子。

场景* SCE=hellowscene : create();

director :3360 getinstance()-replace scene(cctransitionpageturn : create(1.0,sce,false));第四,风景层(层)

风景图层类不仅继承了Node类,还继承了cctouchdelegatee、ccacceleromelerdelegatee、CCKeypadDelegate,所以它还负责输入、触摸、加速传感器功能。

cocos2dx中的核心类是什么

CCLayerColor类通常可以用作掩码。它可以设置rbga值。3.0版之前,可以通过设置其触摸级别高于按钮来防止蒙版穿透,但3.0版之后就不行了。我们能

layer * cover=layer color : create(cc C4(130,130,130,200));

cover-setContentSize(CCSizeMake(800,480));

盖子-设定位置(0,0);

this-addChild(封面);

自动校准=[](触摸*,事件*)

{

returntrue

};

汽车

nbsp;listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = callback;
    listener->setSwallowTouches(true);//不往下传播
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,cover);

    这样可以防止穿透问题的发生。只是添加了一个事件监听器,设置这个事件监听器吞噬触摸,在onTouchBegan回调函数返回了true.

    CCScrollView在cocos的扩展库里面,用的时候要引用#include "cocos-ext.h"头文件,以及加入USING_NS_CC_EXT;命名空间。如果要使用cocosstudio导出的JSON、或者使用Extension扩展库,libCocosStudio,libExtension,libGUI都要手动添加。下面以libExtension库的添加为例

    第一步,在"解决方案"中右击,选择"添加"->"现有项目",在弹出的对话框中找到“cocos2d\extensions\proj.win32\libExtensions.vcxproj”,点击确认。

    第二步,对你的项目右键,选择“引用...”。在弹出的属性页中点选下面的“添加新引用”。在弹出的子级对话框中勾选我们刚才刚加入的三个lib项目,点击确定,这样就完成添加项目对库的引用。

        第三步,为你的项目添加包含目录。

                $(EngineRoot)
        $(EngineRoot)cocos
        $(EngineRoot)cocos\editor-support

        项目->属性->c/c++常规->附加包含路径

    一个简单的Scroll类调用的小例子:

    bool HelloWorld::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
        
       CCNode *pContainer = Layer::create();
       pContainer->setContentSize(CCSizeMake(800,960));
       CCSprite *spr = Sprite::create("Guide_Light_New.png");
       spr->setPosition(400,240);
       pContainer->addChild(spr);
       ScrollView *scrolls = ScrollView::create(CCSizeMake(800,240),pContainer);
       scrolls->setDirection(ScrollView::Direction::VERTICAL);
       this->addChild(scrolls);
        return true;
    }

     CCMenu类,只要注意这个类是Layer的一个子类,是一个层,它上面可以放好多MenuItem。

    Control类及其子类,ControlSlider类这儿就写一个例子

    bool HelloWorld::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
        
       ControlSlider  *slider = ControlSlider::create("bossxt.png","bossxt1.png","vip1.png");
       slider->setMinimumValue(0.0f);
       slider->setMaximumValue(100.0f);
       slider->setPosition(400,240);
       slider->addTargetWithActionForControlEvents(this,cccontrol_selector(HelloWorld::sliderCallback),Control::EventType::VALUE_CHANGED);
       this->addChild(slider);
    
       label = Label::create("0","",25);
       label->setPosition(400,120);
       this->addChild(label);
        return true;
    }
     
    void HelloWorld::sliderCallback(cocos2d::Object *sender, Control::EventType controlEvent)
    {
    auto slide_control = (ControlSlider*)sender;//通过回调参数sender 获得ControlSlider
    int current_value = slide_control->getValue();//获取slide当前的值
    char str[32];
    sprintf(str,"%d",current_value);
    label->setString(str);
    }

    cocos2dx中的核心类是什么

五、精灵类Sprite

    精灵类可以用一张图片,或一张图片的一部分来定义,Sprite和它的子类可以作为精灵批处理类的子项。

    Sprite类

    cocos2dx中的核心类是什么

纹理贴图集是将我们需要的部分图片放在一张大小固定的图片,可以节约内存。因为 OpenGL 机制会把单张图处理成相应大小的长宽都是 2 的 n 次方的图片,所以把图片放在一起可以节约空间。

    贴图类CCTexture2D,贴图类CCTexture2D是OpenGL的概念,在OpenGL中称图片为贴图,在Cocos2dx中是图片对象的意思,可以通过它创建精灵对象。它直接继承于Ref类

    精灵批处理类CCSpriteBatchNode,当要处理俩张或俩张以上的相同精灵时,如果逐个渲染,每一次渲染都会调用OpenGL函数,因为当系统在屏幕上渲染一张贴图的时候,图形处理硬件必须首先准备渲

染,然后渲染图形,最后完成渲染以后的清理工作。以上是每次渲染固定的开销,这样帧率就会下降 15% 左右或者更多。如果将所有需要渲染的同一张贴图只进行一次准备,一次渲染,一次清理就可以解决这个问题了。这时可以使用 CCSpriteBatchNode 类来批处理这些精灵,比如游戏屏幕中的***等就可以这样做。用它作为父层来创建子精灵,并且使用它来管理精灵类,这样可以提高程序的效率。(***等一次出现很多的相同精灵),这里需要说明的是,加入 CCSpriteBatchNode 类的精灵类越多,提高效率的效果就越明显。可以把CCSpriteBatchNode 类理解为CCLayer 类,只不过CCSpriteBatchNode类只接受CCSprite 类和它的子类。

    bool HelloWorld::init()
    {
        if ( !Layer::init() )
        {
            return false;
        }
        CCSpriteBatchNode *batch = CCSpriteBatchNode::create("info_prop9.png");
    batch->setPosition(0,0);
    this->addChild(batch);//默认锚点是0,0,CCSpriteBatchNode相当于一个层,只是它里面只能放精灵
    for (int i = 0; i < 100; i++)
    {
    int x = CCRANDOM_0_1()*700+50;
    int y = CCRANDOM_0_1()*380+50;//CCRANDOM_0_1()这个宏是产生0-1之间的随机数
    CCSprite *spr = Sprite::createWithTexture(batch->getTexture());
    spr->setPosition(x,y);
    batch->addChild(spr);
    }
        return true;
    }

精灵帧类 CCSpriteFrame,精灵帧的概念是相对于动画而产生的。一个精灵是固定的节点,它可以拥有许多精灵帧(CCSpriteFrame) ,在它们之间切换就形成了动画。

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

六、摄像机类 CCCamera

    所有节点都拥有一个摄像机类 CCCamera。只有通过摄像机类,节点才会被渲染出来。当节点发生缩放旋转和位置变化的时候,都需要覆盖 CCCamera 类,让这个节点通过CCCamera 类重新渲染。

    可以通过    Sprite *spr = Sprite::create("aaa.png");

                CCCamera *came = spr->getCamera();来获得属于该节点的摄像机,然后做一些操作,比如came->setEyeXYZ(0, 0, m_z);通过设置m_z的值就可以让一个精灵看起来离自己越来越远。

七、容器类CCArray

    CCArray *array = CCArray::create();它不用确定存储对像的类型,每个对像类型可以不相同。 

八、绘制图形类

    在节点类CCNode中可以重写 draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)函数并在其中绘制图形

     void HelloWorld::draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)
     {
        Node::draw(renderer,transform,transformUpdated);
        //画线
        glLineWidth(3.0f);
        ccDrawColor4B(255,0,255,255);
        ccDrawLine(Point(0,0),Point(800,480));
        //画圆
        glLineWidth(2);
        ccDrawColor4B(0, 255, 255, 255);
        ccDrawCircle( Point(400,240), 50, CC_DEGREES_TO_RADIANS(90), 50, true);
        //画多边形
        CCPoint vertices2[] = { ccp(30,130), ccp(30,230), ccp(50,200) };
        ccDrawPoly( vertices2, 3, true);
        //画贝塞尔曲线
        ccDrawQuadBezier(ccp(0,480), ccp(400,240), ccp(800,480), 50);
     }

九、定时器

    在游戏中,时常需要隔一段时间更新一些数据或者是人物位置,Cocos2D-x 中提供了这些时间调度的函数,所有 CCNode 类的子类都有这样的函数。

    1.更新定时器

    //开启定时器          

      this->scheduleUpdate();

    //重写虚函数update

 void HelloWorld::update(float dt)
     {
     }

    2.自定义定时器

    //开启定时器,延时2s执行,执行3+1次,执行间隔1s

 this->schedule(schedule_selector(HelloWorld::log),1,3,2);

    //回调函数

 void HelloWorld::log(float dt)
    {
    }

看完上述内容,你们对cocos2dx中的核心类是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/81843.html

(0)

相关推荐

  • dy刷粉网站推广马上刷,有没有抖音刷点赞双击的神器?

    技术dy刷粉网站推广马上刷,有没有抖音刷点赞双击的神器?我们刷抖音的时候都会发现我们经常看到的那些视频点赞量都是非常高的,而且被点击的概率也更高,可能你的朋友们也刷到了这个视频。所以抖音视频点赞量对于提高抖音视频热度是非

    测评 2021年11月11日
  • apachedubbo深度分析(apachedubbo异步调用如何实现)

    技术Apache Dubbo全链路异步怎么实现本篇内容介绍了“Apache Dubbo全链路异步怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年12月15日
  • 一筹莫展什么意思,一筹莫展,与,一愁莫展,的区别

    技术一筹莫展什么意思,一筹莫展,与,一愁莫展,的区别区别是一个词语是正确的,一个是错误的一筹莫展什么意思。正确词语是“一筹莫展”,意思是一点计策也施展不出,一点办法也想不出。“一愁莫展”这个词是现代人误写,是错误写法。

    生活 2021年10月29日
  • 西汉建立时间,东汉和西汉,哪个更强大

    技术西汉建立时间,东汉和西汉,哪个更强大在中国历史上,一直有着“强汉盛唐”的说法,西汉曾有“明犯我强汉者,虽远必诛!”、“凡日月所照,江河所至,皆为汉土”的豪言壮语。东汉也有“光武中兴”、“明章之治”的开明盛世。西汉和东

    生活 2021年10月28日
  • 怎么进行Hadoop安装部署

    技术怎么进行Hadoop安装部署这篇文章将为大家详细讲解有关怎么进行Hadoop安装部署,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.Hadoop环境变量在/home/dbrg/H

    攻略 2021年11月24日
  • 引擎ECS框架中system的语法糖是怎么实现的

    技术引擎ECS框架中system的语法糖是怎么实现的引擎ECS框架中system的语法糖是怎么实现的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。集(B

    攻略 2021年11月24日