系统定义的事件,如触摸事件、键盘事件等都是被系统自动触发的。除了使用系统定义的事件之外,我们还可以自定义一些事件,它们就不是由系统来触发了,而是由我们自己写的代码来触发,如:
_listener = EventListenerCustom::create("game_custom_event1", [=](EventCustom* event){
std::string str("Custom event 1 received, ");
char* buf = static_cast<char*>(event->getUserData());
str += buf;
str += " times";
statusLabel->setString(str.c_str());
});
_eventDispatcher->addEventListenerWithSceneGraphPriority(_listener, this);
上面自定义了事件监听器,还有一个响应的方法,并被添加到了事件分发器event
dispatcher中。触发方式如下:
static int count = 0;
++count;
char* buf[10];
sprintf(buf, "%d", count);
EventCustom event("game_custom_event1");
event.setUserData(buf);
_eventDispatcher->dispatchEvent(&event);
上面这个例子创建了一个EventCustom对象,并设置它的UserData。然后通过 _eventDispatcher->dispatchEvent(&event)进行手动分发。这就触发了之前定义的事件处处理程序。处理程序被立即调用,因此可以使用本地堆栈变量作为用户数据。