我须提出“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更新了我的问题。我使用与提供的链接相同的代码。 –