如何在cocos2d-x 3.2中禁用Android中的多点触控

时间:2014-08-15 07:47:05

标签: cocos2d-x cocos2d-x-3.0

我正在以这种方式设置单点触控处理程序

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)代码中禁用多点触控?

1 个答案:

答案 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论坛上提供的,对我来说不起作用。