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)
{
// 処理
}
こういう風にも使えます。