首页 > 代码库 > Cocos2d-x3.0 RenderTexture(三)

Cocos2d-x3.0 RenderTexture(三)


.h

#include "cocos2d.h"
#include "cocos-ext.h"
#include "ui/CocosGUI.h"
#include "cocostudio/CocoStudio.h"
USING_NS_CC;

USING_NS_CC_EXT;
using namespace ui;

private:
    cocos2d::SpriteBatchNode *mgr;;
    
    cocos2d::Sprite *sp1;
    cocos2d::Sprite *sp2;
    cocos2d::Sprite *sp3;
    cocos2d::Sprite *sp4;
    cocos2d::Sprite *sp5;
    cocos2d::Sprite *sp6;
    cocos2d::Sprite *sp7;
    cocos2d::Sprite *sp8;
    cocos2d::Sprite *sp9;

.cpp

    auto listener = EventListenerTouchAllAtOnce::create();
        
       
        auto label = Label::createWithTTF("vertexZ = 50", "Marker Felt.ttf", 64);
        label->setPosition(Point(size.width / 2, size.height * 0.25f));
        this->addChild(label);
        
        auto label2 = Label::createWithTTF("vertexZ = 0", "Marker Felt.ttf", 64);
        label2->setPosition(Point(size.width / 2, size.height * 0.5f));
        this->addChild(label2);
        
        auto label3 = Label::createWithTTF("vertexZ = -50", "Marker Felt.ttf", 64);
        label3->setPosition(Point(size.width / 2, size.height * 0.75f));
        this->addChild(label3);

        label->setPositionZ(50);
        label2->setPositionZ(0);
        label3->setPositionZ(-50);
        
        
        
        
        SpriteFrameCache::getInstance()->addSpriteFramesWithFile("circle.plist");
        mgr = SpriteBatchNode::create("circle.png", 9);
        this->addChild(mgr);
    auto    sp1 = Sprite::createWithSpriteFrameName("circle.png");
        sp2 = Sprite::createWithSpriteFrameName("circle.png");
        sp3 = Sprite::createWithSpriteFrameName("circle.png");
        sp4 = Sprite::createWithSpriteFrameName("circle.png");
        sp5 = Sprite::createWithSpriteFrameName("circle.png");
        sp6 = Sprite::createWithSpriteFrameName("circle.png");
        sp7 = Sprite::createWithSpriteFrameName("circle.png");
        sp8 = Sprite::createWithSpriteFrameName("circle.png");
        sp9 = Sprite::createWithSpriteFrameName("circle.png");

        mgr->addChild(sp1, 9);
        mgr->addChild(sp2, 8);
        mgr->addChild(sp3, 7);
        mgr->addChild(sp4, 6);
        mgr->addChild(sp5, 5);
        mgr->addChild(sp6, 4);
        mgr->addChild(sp7, 3);
        mgr->addChild(sp8, 2);
        mgr->addChild(sp9, 1);
        
        sp1->setPositionZ(400);
        sp2->setPositionZ(300);
        sp3->setPositionZ(200);
        sp4->setPositionZ(100);
        sp5->setPositionZ(0);
        sp6->setPositionZ(-100);
        sp7->setPositionZ(-200);
        sp8->setPositionZ(-300);
        sp9->setPositionZ(-400);

        sp9->setScale(2);
        sp9->setColor(Color3B::YELLOW);
        
        
        
        //[=]可以掉用外部变量
        listener->onTouchesBegan = [=](const std::vector<Touch *> &touches, cocos2d::Event *unused_event)
        {
            for (auto &item:touches) {
                auto touch = static_cast<Touch*>(item);
                auto location = touch->getLocation();
                
                sp1->setPosition(location);
                sp2->setPosition(location);
                sp3->setPosition(location);
                sp4->setPosition(location);
                sp5->setPosition(location);
                sp6->setPosition(location);
                sp7->setPosition(location);
                sp8->setPosition(location);
                sp9->setPosition(location);
            }
        };
        
        listener->onTouchesMoved = [=](const std::vector<Touch*>& touches,Event* unused_event)
        {
            for (auto &item:touches) {
                auto touch = static_cast<Touch*>(item);
                auto location = touch->getLocation();
                
                sp1->setPosition(location);
                sp2->setPosition(location);
                sp3->setPosition(location);
                sp4->setPosition(location);
                sp5->setPosition(location);
                sp6->setPosition(location);
                sp7->setPosition(location);
                sp8->setPosition(location);
                sp9->setPosition(location);
            }

            
        };
        
        
        listener->onTouchesEnded = [=](const std::vector<Touch *> &touches, cocos2d::Event *unused_event){
            auto texture = RenderTexture::create(512, 512);
            if (NULL == texture)
            {
                return;
            }
            texture->setAnchorPoint(Point(0, 0));
            texture->setKeepMatrix(true);
            texture->begin();
            
            this->visit();
            
            texture->end();
            
            auto sprite = Sprite::createWithTexture(texture->getSprite()->getTexture());
            
            sprite->setPosition(Point(256, 256));
            sprite->setOpacity(182);
            sprite->setFlippedY(1);
            this->addChild(sprite, 999999);
            sprite->setColor(Color3B::GREEN);
            
            sprite->runAction(Sequence::create(FadeTo::create(2, 0),
                                               Hide::create(),
                                               NULL));

            
        };
        
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);