我正在以这种方式设置单点触控处理程序
auto touchListener = EventListenerTouchOneByOne::create();
touchListener->setSwallowTouches(true);
touchListener->onTouchBegan = CC_CALLBACK_2(MyClass::onTouchBegan, this);
touchListener->onTouchMoved = CC_CALLBACK_2(MyClass::onTouchMoved, this);
touchListener->onTouchEnded = CC_CALLBACK_2(MyClass::onTouchEnded, this);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
对于iOS,它可以正常工作,但对于Android,如果我用两根手指同时触摸屏幕,它会调用onTouchBegan两次。
如何从Android的cocos2d-x(3.2)代码中禁用多点触控?
答案 0 :(得分:3)
我找到了一个解决方法,因为cocos2d-x没有这方面的官方解决方案。 (使用Cocos2d-x 3.2)
由于每次触摸都有自己的ID,我们只需要过滤其他人的第一个触摸ID。 我通过以下方式实现了这一目标:
创建图层的实例变量:
int _currentTouchID;
在图层的 init() 方法中使用 -1 初始化它:
_currentTouchID = -1;
在我接下来做的所有触摸处理程序的开头:
bool MyClass::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
if (_currentTouchID < 0) {
_currentTouchID = touch->getID();
}
else {
return false;
}
//Your code here
return true;
}
void MyClass::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event)
{
if (_currentTouchID != touch->getID()) {
return;
}
//Your code here
}
void MyClass::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event)
{
if (_currentTouchID == touch->getID()) {
_currentTouchID = -1;
}
else {
return;
}
//Your code here
}
就是这样。如果您找到了更好的解决方案,请提供解决方案。
BTW:在Cocos2dxGLSurfaceView.java文件中评论开关案例MotionEvent.ACTION_POINTER_DOWN: 因为它是在cocos2d-x论坛上提供的,对我来说不起作用。