Cocos2d-x has callback functions like
CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2
CC_CALLBACK_3
these functions are defined functions.
// new callbacks based on C++11 #define CC_CALLBACK_0(__selector__,__target__, ...) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, ...) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, ##__VA_ARGS__)
CC_CALLBACK_(N) function N means, the number of callback function pass parameters.
CC_CALLBACK_0 function: pass no parameter.
CC_CALLBACK_1 function: pass one parameter.
CC_CALLBACK_2 function: pass two parameter.
example code)
https://gist.github.com/pineoc/ca43124d321acb21486d
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool HelloWorld::init() | |
{ | |
/*has some code*/ | |
//CC_CALLBACK_0 function | |
auto sprite1 = Sprite::create("CloseNormal.png"); | |
auto callback = CCCallFunc::create(CC_CALLBACK_0(HelloWorld::myFunction1, this)); | |
sprite1->runAction(callback); | |
this->addChild(sprite1); | |
auto sprite2 = Sprite::create("CloseNormal.png"); | |
auto callback = CCCallFunc::create(CC_CALLBACK_1(HelloWorld::myFunction2, this)); | |
sprite2->runAction(callback); | |
this->addChild(sprite2); | |
auto btn = Button::create("CloseNormal.png","CloseNormal.png"); | |
btn->addTouchEventListener(CC_CALLBACK_2(HelloWorld::myFunction3, this)); | |
this->addChild(btn); | |
} | |
void HelloWorld::myFunction1() | |
{// no passed param | |
CCLOG("myFunction1"); | |
} | |
void HelloWorld::myFunction2(Ref* pSender) | |
{//one passed param | |
CCLOG("myFunction2"); | |
} | |
void HelloWorld::myFunction3(Ref* pSender, Widget::TouchEvent e) | |
{//two passed param | |
//Button event listener | |
CCLOG("myFunction3"); | |
} |
example code)
http://www.cocos2d-x.org/wiki/Game_Controller
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void HelloWorld::registerControllerListener() | |
{ | |
//create an evnetListenerController | |
_listener = EventListenerController::create(); | |
//bind onConneected event call function | |
_listener->onConnected = CC_CALLBACK_2(HelloWorld::onConnectController,this); | |
//bind disconnect event call function | |
_listener->onDisconnected = CC_CALLBACK_2(HelloWorld::onDisconnectedController,this); | |
//bind onKeyDown event call function | |
_listener->onKeyDown = CC_CALLBACK_3(HelloWorld::onKeyDown, this); | |
//bind onKeyUp event call function | |
_listener->onKeyUp = CC_CALLBACK_3(HelloWorld::onKeyUp, this); | |
//bind onAxis event call function, onAxis will be called when analog stick is changed | |
_listener->onAxisEvent = CC_CALLBACK_3(HelloWorld::onAxisEvent, this); | |
//Activate the listener into the event dispatcher | |
_eventDispatcher->addEventListenerWithSceneGraphPriority(_listener, this); | |
//This function should be called for iOS platform | |
Controller::startDiscoveryController(); | |
} | |
//Controller is the obejects of the Controller,keyCode means the keycode of the controller you click down | |
void HelloWorld::onKeyDown(cocos2d::Controller *controller, int keyCode, cocos2d::Event *event) | |
{ | |
CCLOG("KeyDown:%d", keyCode); | |
} | |
void HelloWorld::onKeyUp(cocos2d::Controller *controller, int keyCode, cocos2d::Event *event) | |
{ | |
//You can get the controller by tag, deviceId or devicename if there are multiple controllers | |
CCLOG("tag:%d DeviceId:%d DeviceName:%s", controller->getTag(), controller->getDeviceId(), controller->getDeviceName().c_str()); | |
CCLOG("KeyUp:%d", keyCode); | |
} | |
//The axis includes X-axis and Y-axis and its range is from -1 to 1. X-axis is start from left to right and Y-axis is bottom to top. | |
void HelloWorld::onAxisEvent(cocos2d::Controller* controller, int keyCode, cocos2d::Event* event) | |
{ | |
const auto& keyStatus = controller->getKeyStatus(keyCode); | |
CCLOG("Axis KeyCode:%d Axis Value:%f", keyCode, keyStatus.value); | |
} | |
void HelloWorld::onConnectController(Controller* controller, Event* event) | |
{ | |
CCLOG("Game controller connected"); | |
} | |
void HelloWorld::onDisconnectedController(Controller* controller, Event* event) | |
{ | |
CCLOG("Game controller disconnected"); | |
} | |
bool HelloWorld::init() | |
{ | |
////////////////////////////// | |
// 1. super init first | |
if ( !Layer::init() ) | |
{ | |
return false; | |
} | |
...... | |
...... | |
registerControllerListener(); | |
return true; | |
} |
댓글 없음:
댓글 쓰기