1. 程式人生 > >【Cocos2d-x 3.0 基礎系列一】 各類回調函數寫法匯總

【Cocos2d-x 3.0 基礎系列一】 各類回調函數寫法匯總

void ont white fort instance gles dir ner mdi

一、button回調


1. Lambda 表達式,C++11 Lambda 賦予了Cocos2d-x 3.0創建回調函數的靈活性。

auto itemNor	=	Sprite::create("CloseNormal.png");
auto menuItem	=	MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender)
{
	log("show this msg.");
});
auto menu	=	Menu::create(menuItem,nullptr);
this->addChild(menu);

2.宏定義bind方式創建回調.
auto itemNor	=	Sprite::create("CloseNormal.png");
auto menuItem	=	MenuItemSprite::create(itemNor,nullptr,nullptr,CC_CALLBACK_1(HelloWorld::menuCloseCallback,this));
auto menu	=	Menu::create(menuItem,nullptr);
this->addChild(menu);

void HelloWorld::menuCloseCallback(Ref* pSender)
{
	log("show this msg.");
}

3.MenuToggleItem回事件回調
auto toggleSpNor	=	Label::createWithSystemFont("OPEN_BAME","WRYH",65);
auto toggleSpSel	=	Label::createWithSystemFont("CLOSE_BAME","WRYH",65);
auto toggleSpDis	=	Label::createWithSystemFont("DISABLE_BAME","WRYH",65);
auto toggleItemNor	=	MenuItemLabel::create(toggleSpNor);
auto toggleItemSel	=	MenuItemLabel::create(toggleSpSel);
auto toggleItemDis	=	MenuItemLabel::create(toggleSpDis);

auto toggleItem		=	MenuItemToggle::createWithCallback(CC_CALLBACK_0(HelloWorld::toggleCallBack,this),toggleItemNor,toggleItemSel,nullptr);

auto toggleMenu	=	Menu::create(toggleItem,nullptr);
this->addChild(toggleMenu);

void HelloWorld::toggleCallBack()
{
	log("Do something when toggle did touched..");
}



二、定時器回調

/*周期定時調用*/
this->schedule(SEL_SCHEDULE(&HelloWorld::gameStep));
/*倒計是定時調用一次*/
this->scheduleOnce(SEL_SCHEDULE(&HelloWorld::gameStep),3.0f);/*周期定時調用update需重寫update方法*/
this->scheduleUpdate();

void HelloWorld::gameStep(float dt)
{
	log("on timer...");
}

三、觸屏事件回調

auto touchEvt		    =	cocos2d::EventListenerTouchOneByOne::create();
touchEvt->onTouchBegan	    =	CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
touchEvt->onTouchMoved	    =	CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
touchEvt->onTouchEnded      =	CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
touchEvt->onTouchCancelled     =	CC_CALLBACK_2(HelloWorld::onTouchCancelled,this);

Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchEvt,this);

bool HelloWorld::onTouchBegan(cocos2d::Touch* touch,cocos2d::Event* evt)
{
	log("Touch began..");
	return true;
}
void HelloWorld::onTouchMoved(cocos2d::Touch* touch,cocos2d::Event* evt)
{
	log("Touch moved..");
}
void HelloWorld::onTouchEnded(cocos2d::Touch* touch,cocos2d::Event* evt)
{
	log("Touch leave..");
	Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(this);
}
void HelloWorld::onTouchCancelled(cocos2d::Touch* touch,cocos2d::Event* evt)
{
	log("Something was happend , touch event is cut..");
}

四、動作回調


auto callBack		=	CallFunc::create(CC_CALLBACK_0(HelloWorld::actionCallBack,this));
this->runAction(callBack);

void HelloWorld::actionCallBack()
{
	log("Do something when action did finished..");
}

五、自己定義事件回調


auto callBack		=	[](EventCustom* evt)
							{
								log("catch an custom event!!");
							};
cocos2d::EventListenerCustom* customEvt	=	EventListenerCustom::create("ME_CUSTOM_EVENT_TEST",callBack);
//註冊自己定義事件(處理優先級為12)
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(customEvt,12);

//拋出自己定義事件
Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("ME_CUSTOM_EVENT_TEST");





【Cocos2d-x 3.0 基礎系列一】 各類回調函數寫法匯總