zoukankan      html  css  js  c++  java
  • [Cocos2d-x For WP8]Layer 层

        层(CCLayer) 从概念上说,层就是场景里的背景。 CCLayer同样是CCNode的子类,通常用addChild方法添加子节点。CCLayer对象定义了可描绘的区域,定义了描绘的规则。CCLayer可以实现半透明的效果,层的事件相应机制 : 最外层最先接受到事件(屏幕触碰),最后是底层,如果在某层处理了该事件,则后面的层不会在接受到事件信号。

        CCLayer类的作用主要有三个。

    (1)其他子节点的容器和组织者

    例如对一个层使用动作,那么所有在这个层上的物体都会受到影响。这意味着同一层的所有物体可以一起移动、旋转和缩放。如果这些物体都是同一个层的子节点,就可以通过改变层的属性或者在层上执行动作,从而影响层上所有子节点。

    (2)接收触摸事件

    设置isTouchEnabled为YES,可以让层接收触摸事件。一旦启用isTouchEnabled属性,将会开始调用许多与接收触摸输入相关的方法。这些事件包括:当新的触摸事件开始时,当手指在触摸屏上移动时,以及当用户手指离开屏幕以后。

    (3)接收加速计事件

    和触摸输入一样,加速计必须在启用以后才能接收加速计事件。

    头文件:

     #include <CCLayer.h>                       

    继承关系图:

          CCNode   CCTouchDelegate   CCAccelerometerDelegate   CCKeypadDelegate   CCObject   CCCopying   CCLayerColor   CCLayerMultiplex   CCMenu   CCLayerGradient                           

    1.CCLayerColor是一个透明的、可以按照RGB设置填充颜色的层,是实现CCRGBAProtocol协议的CCLayer子类。它继承了CCNode所有属性和方法,同时还可以接收触摸事件和加速计事件。

    2.CCLayerGradient渐变色层,CCLayerColor有一个子类CCLayerGradient,可以在背景上绘制渐变色。CCLayerGradient继承了CCLayerColor的所有特性,增加了渐变方向、插值模式等属性。以下代码初始化带有特定渐变效果的色彩层。

    3.CCMenu是表示菜单栏,用来创建游戏中的各种菜单,包括主菜单、游戏设置等,而实现菜单系统的就是CCMenu类及其子类。

    CCMenu继承自CCLayer,是一个菜单管理选择画面层,该画面以Menu对象为集合类,由MenuItem类实例组成各种按钮。CCMenu类提供的方法主要用来按横向、竖向或者多行列排序展示MenueItem的类实例。同时,CCMenu只支持CCMenuItem节点作为它的子节点。

    注意 CCMenuItem是基础类,不能直接用来创建菜单,它的作用主要是设置按钮状态以及处理回调方法。需要使用CCMenuItem的子类来创建定制菜单项。

    4.CCLayerMultipex,CCLayer的子类CCLayerMultipex,可以容纳多个层,但每次只可激活其中的一个。通常不鼓励使用CCLayerMultipex。

    下面代码示例CCLayerColor的使用:

    class LayerTest1 : public cocos2d::CCLayer
    {
    public:
        LayerTest1();
        ~LayerTest1();
        virtual void onEnter();
        void updateSize(cocos2d::CCPoint &touchLocation);
    
        virtual void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
        virtual void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
        virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);
    };
    
    void LayerTest1::onEnter()
    {
        CCLayer::onEnter();
        setTouchEnabled(true);  
        CCSize s = CCDirector::sharedDirector()->getWinSize();
        //创建一个颜色的层,设置宽度和高度
        CCLayerColor* layer = CCLayerColor::create( ccc4(0xFF, 0x00, 0x00, 0x80), 200, 200); 
        //将忽略锚点置为false。由于默认设置是忽略锚点,也就是以左下角为锚点,可以让布景层考虑锚点的影响,这时默认的锚点在中心。
        layer->ignoreAnchorPointForPosition(false);
        layer->setPosition( ccp(s.width/2, s.height/2) );
        addChild(layer, 1, 1);
    }
    //根据触摸点修改颜色层的大小
    void LayerTest1::updateSize(CCPoint &touchLocation)
    {    
        CCSize s = CCDirector::sharedDirector()->getWinSize();
        CCSize newSize = CCSizeMake( fabs(touchLocation.x - s.width/2)*2, fabs(touchLocation.y - s.height/2)*2);
        CCLayerColor* l = (CCLayerColor*) getChildByTag(1);
        l->setContentSize( newSize );
    }
    
    void LayerTest1::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
    {
        ccTouchesMoved(pTouches, pEvent);
    }
    //触摸在屏幕移动的时候将修改颜色层的大小
    void LayerTest1::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
    {
        CCTouch *touch = (CCTouch*)pTouches->anyObject();
        CCPoint touchLocation = touch->getLocation();
    
        updateSize(touchLocation);
    }
    
    void LayerTest1::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
    {
        ccTouchesMoved(pTouches, pEvent);
    }
    CCScene* HelloWorld::scene()
    {
        CCScene * scene = NULL;
        do 
        {   // 'scene'是一个可以自动释放的对象
            scene = CCScene::create();
            //创建失败跳出循环
            CC_BREAK_IF(! scene);
            // 'layer'是一个可以自动释放的对象
            HelloWorld *layer = HelloWorld::create();
            //创建失败跳出循环
            CC_BREAK_IF(! layer);
            // 添加layer到scene上面
            scene->addChild(layer);
    
            LayerTest1 *layer2 = new LayerTest1();
            // 添加layer到scene上面
            scene->addChild(layer2);
        } while (0);
    
        // 返回scene
        return scene;
    }

    运行的效果如下:

  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/linzheng/p/3279926.html
Copyright © 2011-2022 走看看