cocos2d-x基础 - 用户交互事件处理
1. 单触摸点
单触摸点的侦听器定义方式:
auto listener = EventListenerTouchOneByOne::create();
接下来定义单触摸点事件函数:
// 触摸开始
listener->onTouchBegan = [](Touch *t, Event *e){
if (e->getCurrentTarget()->getBoundingBox().containsPoint(t->getLocation())) {
log("点击事件");
}
return true; // onTouchBegan如果后面还有侦听移动和结束信息就要true
};
// 触摸点移动
listener->onTouchMoved = [](Touch *t, Event *e){
if (e->getCurrentTarget()->getBoundingBox().containsPoint(t->getLocation())) {
log("触摸点移动了");
}
};
//
listener->onTouchEnded = [](Touch *t, Event *e){
if (e->getCurrentTarget()->getBoundingBox().containsPoint(t->getLocation())) {
log("触摸结束");
}
};
可以看到一共有三种触摸事件
注意其中触摸事件的传递,只有在onTouchBegin>中返回true才能启动后面的移动和结束侦听函数
2. 多触摸点
多触摸点的侦听器的定义方式:
auto listener = EventListenerTouchAllAtOnce::create(); // 多点触控的侦听器
实现多点触控:
// 多触摸点
listener->onTouchesBegan = [](std::vector<Touch*> ts, Event *e){
log("多点触摸开始");
};
//
listener->onTouchesMoved = [](std::vector<Touch*> ts, Event *e){
log("%ld points in total", ts.size());
};
listener->onTouchesEnded = [](std::vector<Touch*> ts, Event *e){
log("多点触摸结束");
};
Director::getInstance()
->getEventDispatcher()>addEventListenerWithSceneGraphPriority(listener, this);
在iphone上调试时发现只能侦测到一个点,原因是未开启多点触控支持,解决方法如下:
在ios文件夹下的RootViewController.mm文件中修改如下:
// Enable or disable multiple touches // 开启或关闭多点触控
[eaglView setMultipleTouchEnabled:YES];
就可以实现多点触控了:
3. 加速度传感器
使用方法:
Device::setAccelerometerEnabled(true); // 开启加速度传感器
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(
EventListenerAcceleration::create([](Acceleration *a, Event *e){
// 内容
log("加速度传感器:x=%.7lf, y=%.7lf, z=%.7lf", a->x, a->y, a->z);
}), this);
这里直接在函数中间创建了一个事件侦听器,侦听的对象是当前场景的全局
使用闭包函数直接给create方法添加具体的函数内容
实现效果:
侦测到了手机的各方向的加速度变化
4. 侦听物理按键
实现方法:
auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = [](EventKeyboard::KeyCode code, Event *e){
log("key code : %d", code); // 输出按键代码
// 用switch实现按下某返回键时关闭程序
switch (code) {
case EventKeyboard::KeyCode::KEY_BACKSPACE:
// 关闭程序
Director::getInstance()->end();
break;
default:
break;
}
};
由于iPhone只有home键,而且home键侦听不到,就不做演示了
想要在iphone中响应home键,可以修改AppDelegate.cpp中的两个方法:
void AppDelegate::applicationDidEnterBackground() // 进入后台
void AppDelegate::applicationWillEnterForeground() // 回到前台
来源:CSDN
作者:CC_且听风吟
链接:https://blog.csdn.net/weixin_43826242/article/details/104133958