我須提出「EventCustom」的方式:)
您可以在touchBegan/touchEnded方法增加(無論你把它們...你得到了點。 ..)傳遞一個EventCusto到_eventDispatcher額外的代碼,並把它向全世界宣佈;)
EventCustom *e = new EventCustom("MyAwesomeEvent");
e->setUserData(ptrMyFantasticData); //This function takes a void pointer. cheers :)
_eventDispatcher->dispatchEvent(e);
您可以繼承的EventCustom類,但就是沒有什麼必要。您可以隨時用setUserData()掛起一個對象。
現在,這就需要對事件作出反應的對象可以的OnExit通過
_myCustomListener = EventListenerCustom::create(
"MyAwesomeEvent",
CC_CALLBACK_1(
ListeningClass::onMyAwesomeEvent,
this
)
);
_eventDispatcher->addEventListenerWithXXXXXPriority(_myCustomListener, XXX);
//ScreenGraphPriority/FixedPriority depends on situation. Either should work.
它總是一個很好的做法聽它刪除你的聽衆,當你去了,所以某個地方,也許是(),其中卸下觸摸聽衆刪除此監聽器也一樣,
_eventDispatcher->removeEventListener(_myCustomListener);
去了一下滑出了賽道,澄清: CC_CALLBACK_X是有點棘手的名字。 X表示否。的目標函數將得到的參數。這裏,事件調度器將通過1個參數,即你把它交給了EventCustom的對象,所以我們使用CC_CALLBACK_1。下一個參數 - 這裏是「this」 - 是該方法將被調用的對象。 簡而言之,我們可以說這個回調會導致函數調用this->onMyAwesomeEvent(e);
對於CC_CALLBACK_2向前,我們可以指定其他參數,第3個參數。
手頭再回到這個問題,ListeningClass :: onMyAwesomeEvent看起來像
void ListeningClass::onMyAwesomeEvent(EventCustom *e)
{
MyFantasticData *d = (MyFantasticData *) e->getUserData();
CCLOG("[ListeningClass::onMyAwesomeEvent] %d", d->getMyPreciousInt());
}
希望它能幫助:)
您可以發佈代碼的完整小例子? – Raptor
@Raptor更新了我的問題。我使用與提供的鏈接相同的代碼。 –