auto listener = EventListenerTouchOneByOne::create(); //创建一个多点触控的监听事件
//注:事件类型对应不同的类,如:EventListenerMouse是鼠标,EventListenerAcceleration 加速器,EventListenerKeybord键盘等,参p97
/*
键盘响应 onKeyPressed和onKeyReleased对应按键的按下与释放
鼠标响应 onMouseDown,onMouseUp,onMouseMove,onMouseScroll
*/
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);//设置事件回调函数
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//以场景图方式注册
// _eventDispatcher->addEventListenerWithFixedPriority(listener, 10);//以固定优先级方式注册*/
/*注:_eventDispatcher 是一个系统定义好的Node类中的指针,所有继承于Node的子类,都可以用该指针注册事件的监听
同样一个listener,如果有多个对象需要使用,可以使用clone函数,即参数为listener->clone() */
//事件的操作
//_eventDispatcher->pauseEventListenersForTarget(this);//暂停节点事件
//_eventDispatcher->resumeEventListenersForTarget(this);//恢复暂停的节点事件
//_eventDispatcher->setEnabled(false);//关闭所有监听事件,true 为开启,false为关闭
//_eventDispatcher->removeEventListener(listener);//通过EventListener指针删除
//_eventDispatcher->removeEventListenersForTarget(this);//通过目标对象删除
事件吞噬
listener->setEnabled(true);
//listener->setSwallowTouches(true);
listener->onTouchBegan = [](cocos2d::Touch* touch, cocos2d::Event* evt) {return true; };
鼠标点击,弹出坐标信息测试
auto listener2 = EventListenerMouse::create();
listener2->onMouseDown = [](Event* event) //使用lambda表达式作为回调函数
{
EventMouse * em;
em = dynamic_cast<EventMouse*>(event);
Vec2 pos = em->getLocation();//
char temp[100] = { 0 };
sprintf(temp, "位置:%f ,%f", pos.x, pos.y);
MessageBox(temp, NULL);
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener2, this);
键盘事件测试
auto keybdlistener = EventListenerKeyboard::create();
keybdlistener->onKeyPressed = [](EventKeyboard::KeyCode key, Event * event)
{
switch (key)
{
case EventKeyboard::KeyCode::KEY_0:
MessageBox("keybd 0", NULL);
break;
case EventKeyboard::KeyCode::KEY_F1:
MessageBox("keybd F1", NULL);
break;
}
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(keybdlistener, this);