cocos2dのコールバックについて説明します。

 

CC_CALLBACKは3まであります。(CC_CALLBACK_0、CC_CALLBACK_1、CC_CALLBACK_2、CC_CALLBACK_3)

 

後ろの数字はコールバックの引数が何個必要かによって使えばいいと思います。

 

CC_CALLBACK_0( class::getposition, this ); の形デす。

 

例です。

 

Player.h

 

class Player : public layer

{

     public :

           virtual bool init();

           void getBackNo(Ref* ref);

}

 

Player.cpp

 

Player::init()

{

      if(!Layer::init())

      {

            return false;

      }

 

      auto menu = Menu::create();

      

      // 引数が一つあるからCC_CALLBACK_1を使えばいいです。

      // CC_CALLBACKの一番目の引数は指定したい関数、二番目の引数はコールバックの中で使えるターゲットになります。 (this ないのプロパティーを使えます。)

      auto select = MenuItemImage::create("UI/Button/btn_select.png", "UI/Button/btn_select.png", CC_CALLBACK_1(Player::getBackNo, this) );

 

      return true;

}

 

このように使えます。

 

そして、カスタマイズ形で使いたい場合はこちらです。

 

 

MoveAni.h

 

class MoveAni : public Layer

{

      public :

          virtual bool init();      

 

           // const std::function< return type (引数)>

           void setCallBack(const std::function<void(int, int)> &func);

 

      private :

           void finishedAni();

           std::function<void(int, int)> _callback;

 

MoveAni.cpp

 

#include "MoveAni.h"

 

bool MoveAni::init()

{

       if(!Layer::init())

       {

             return false;

       }

 

       return true;

}

 

void MoveAni::setCallBack(const std::function<void(int, int)> &func)

{

       _callback = func;

}

 

void MoveAni::finishedAni()

{

      _callback(20, 30);

}

 

 

Player.h

 

class Player : public layer

{

     public :

           virtual bool init();

           void Done(int, int);

}

 

Player.cpp

 

#include "MoveAni.h"

 

Player::init()

{

      if(!Layer::init())

      {

            return false;

      }

 

      MoveAni* ani = MoveAni::create();

      ani->setCallBack(CC_CALLBACK_2( Player::Done ,this));

 

 

      return true;

}

 

void Player::Done(int delta, int duration)

{

      // 処理

}

 

 

こういう風にも使えます。