gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:50:39 26 4
gpt4 key购买 nike

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

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

最佳答案

我找到了一个解决方法,因为 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
}

就是这样。如果您找到更好的解决方案,请提供您的解决方案。

顺便说一句:评论开关案例MotionEvent.ACTION_POINTER_DOWN:在Cocos2dxGLSurfaceView.java文件中,因为它是在 cocos2d-x 论坛上提供的,但对我来说不起作用。

关于cocos2d-x - 如何在cocos2d-x 3.2中禁用Android中的多点触控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com