Sceneへの変数渡し[Cocos2d-x]

#はじめに
たぶん使いたくなる時があるはず
[Cocos2d-xで使用できる便利なプログラム](https://qiita.com/708QBT/items/f6b1b30cdb69d73e76bb)で書いたXTLayerを継承している

```cpp:Sample.h
#ifndef __Sample__
#define __Sample__

#include "cocos2d.h"
#include "XTLayer.h"

class Sample : public XTLayer
{   
public:
    //setterとgetterを一気に作れる
    CC_SYNTHESIZE(int, _stage, Stage);
    CC_SYNTHESIZE(int, _level, Level);

    ~Sample();
    Sample();

    //元の記述
    /*
    virtual bool init() override;
    static cocos2d::Scene* scene();
    CREATE_FUNC(Sample);
    */

    //上部記述をコメントアウトして下記のように書く
    //渡したい変数を括弧の中に書く
    virtual bool init(int stageNo, int level);
    static cocos2d::Scene* scene(int stageNo, int level);
    static Sample* create(int stageNo, int level);
    
    //virtual void xtTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
    //virtual void xtTouchesMoved(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
    //virtual void xtTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
    
    virtual void xtTouchesBegan(cocos2d::Vec2 position) override;
    virtual void xtTouchesMoved(cocos2d::Vec2 position) override;
    virtual void xtTouchesEnded(cocos2d::Vec2 position) override;
    
    virtual void xtTapGesture(cocos2d::Vec2 position) override;
    virtual void xtDoubleTapGesture(cocos2d::Vec2 position) override;
    virtual void xtLongTapGesture(cocos2d::Vec2 position) override;
    virtual void xtSwipeGesture(XTTouchDirection direction, float distance, float speed) override;

    
};

#endif /* defined(__Sample__) */

```

```cpp:Sample.cpp
#include "Sample.h"

USING_NS_CC;

Sample::~Sample(){}
Sample::Sample(){}

Scene* Sample::scene(int stageNo, int level){
    Scene *scene = Scene::create();
    Sample *layer = Sample::create(stageNo, level);
	scene->addChild(layer);

    return scene;
}

Sample* Sample::create(int stageNo, int level){
    Sample* ret = new Sample();
    
    if (ret && ret->init(stageNo, level)){
        ret->autorelease();
        return ret;
    }else{
        CC_SAFE_DELETE(ret);
        return NULL;
    }
}

bool Sample::init(int stageNo, int level){
    
    if (!Layer::init()) return false;
    
    auto listener = EventListenerTouchOneByOne::create();
    listener->onTouchBegan = CC_CALLBACK_2(Sample::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(Sample::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(Sample::onTouchEnded, this);
    listener->setSwallowTouches(true);
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
    
    _stageNo = stageNo;
    _level = level;
    
    return true;
}

void Sample::xtTouchesBegan(Vec2 position){}
void Sample::xtTouchesMoved(Vec2 position){}
void Sample::xtTouchesEnded(Vec2 position){}
void Sample::xtTapGesture(Vec2 position){}
void Sample::xtDoubleTapGesture(Vec2 position){}
void Sample::xtLongTapGesture(Vec2 position){}
void Sample::xtSwipeGesture(XTTouchDirection direction, float distance, float speed){
    std::string directionStr = "";
    switch (direction) {
        case XTLayer::UP: directionStr = "UP"; break;
        case XTLayer::DOWN: directionStr = "DOWN"; break;
        case XTLayer::LEFT: directionStr = "LEFT"; break;
        case XTLayer::RIGHT: directionStr = "RIGHT"; break;
        default:break;
    }
    //log("xtSwipeGesture direction: %s, distance: %f, speed: %f", directionStr.c_str(), distance, speed);
}

```

後は受けた値を使ってステージや難易度により変化するプログラムを作る

#次回
[親レイヤーから子レイヤーへのコールバック渡し](https://qiita.com/708QBT/items/7c11684045adbb7f8508)