• ‎Cocos2d-x 学习笔记(3.3) Layer


    1.简介

    Layer直接继承了Node。Layer类似Ps里图层的概念,也可以理解成一块透明玻璃。Scene类似Ps里的一张图像,也可以理解成堆放玻璃的箱子。

    Layer能接收触摸事件、键盘事件、加速器事件。

    导演类一次只能将一个Scene显示,例如存在登录场景、菜单场景、游戏场景,一个时刻只能一个场景被运行。

    一个Scene可以包含多个Layer,例如游戏场景可以包含人物层、背景层、导航菜单栏层。每个Layer都包含了一些元素。

    每个元素都有自己的动作。

    2. Layer与触摸

    Layer里触摸相关成员:

        bool _touchEnabled; // 是否启用触摸
        EventListener* _touchListener; //触摸监听器
        Touch::DispatchMode _touchMode; //触摸类型 单点or多点
        bool _swallowsTouches; //吞没

    Layer里有两种触摸共8个触摸监听器的回调函数,可以被继承Layer的子类重写。

    void setTouchEnabled(bool value)

    本方法修改层是否能接收触摸事件,主要逻辑是:

    1. 参数与_touchEnabled不同时,将_touchEnabled修改为参数。
    2. 如果修改为true,则启用了触摸事件接收,根据触摸类型_touchMode创建相应的单点/多点触摸监听器,设置4个回调函数,并把新建的监听器赋给_touchListener。
    3. 如果修改为false,则关闭了触摸事件接收,从事件分发器中remove _touchListener, 并把_touchListener置空。

    void setTouchMode(Touch::DispatchMode mode)

    void setSwallowsTouches(bool swallowsTouches)

    这两个方法会调用到上面的方法。setTouchMode两方法里,当启用了触摸时,setSwallowsTouches方法里,在修改要set的变量后,会执行:

                setTouchEnabled(false);
                setTouchEnabled(true);

    第一行能将当前的监听器删除,第二行能根据_touchMode重新设置监听器。

    3. LayerColor

    颜色层直接继承了层Layer、颜色混合BlendProtocol。

    颜色层在层的基础上,新增了:不透明度、RGB颜色、颜色混合。

    有3种create方法创建颜色层。参数里可以设置RGBA数值和窗口大小:

    LayerColor * LayerColor::create(const Color4B& color, GLfloat width, GLfloat height)

    当不设置create参数时,使用默认值,即父类Layer的透明背景:

        Size s = Director::getInstance()->getWinSize();
        return initWithColor(Color4B(0,0,0,0), s.width, s.height);

    构造方法里设置了默认的颜色混合:

    LayerColor::LayerColor()
    {
        // default blend function
        _blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
    }

    可以修改颜色层的属性:

    void changeWidthAndHeight(GLfloat w ,GLfloat h)
    void changeWidth(GLfloat w)
    void changeHeight(GLfloat h)
    
    BlendFunc& getBlendFunc()void setBlendFunc(const BlendFunc& blendFunc)void Node::setOpacity(GLubyte opacity)
    void Node::setColor(const Color3B& color)

    4.  LayerGradient

    颜色渐变层LayerGradient直接继承了颜色层LayerColor。

    除了有颜色层的RGBA、颜色混合,渐变层还有这些属性:渐变方向、渐变起终点颜色、渐变起终点透明度。

    颜色渐变是从_startColor变换到_endColor,渐变方向为向量Vec2 _alongVector。

    有3种create方法创建。可以带参数起终点颜色和方向向量实现渐变效果:

    LayerGradient* LayerGradient::create(const Color4B& start, const Color4B& end, const Vec2& v)

    当不设置create参数,默认起终点颜色是黑,方向由上至下,起终点透明度为255,效果类似于层Layer:

    initWithColor(Color4B(0, 0, 0, 255), Color4B(0, 0, 0, 255));
    initWithColor(start, end, Vec2(0, -1));

    5. LayerRadialGradient

    实现了颜色的径向变换。

    6. LayerMultiplex

    能管理多个层。

    用容器Vector<Layer*> _layers存储layer,用_enabledLayer记录当前最后执行的layer。

    用this->addChild(_layers.at(n))方法把某个layer加到当前场景中。

    create方法可以传入多个layer:

    LayerMultiplex* LayerMultiplex::createWithArray(const Vector<Layer*>& arrayOfLayers)
    LayerMultiplex * LayerMultiplex::create(Layer * layer, ...)

    能够切换当前layer,添加layer:

    LayerMultiplex::switchTo(int n)
    LayerMultiplex::addLayer(Layer* layer)

    -

  • 相关阅读:
    极客教学笔记---Java实现简单聊天客户端模拟
    java单例模式四模板
    关于在命令行进行文件输入输出重定向的小笔记
    Python爬虫入门之爬取图片
    Python爬虫入门之查询ip地址
    Python爬虫入门之get网页信息并作为文本输出
    Checker
    Manacher模板
    POJ3974——Palindrome
    Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/deepcho/p/cocos2dx-layer.html
Copyright © 2020-2023  润新知