【问题标题】:CCTouchesMoved called multiple times on single Tap in Cocos2d-xCCTouchesMoved 在 Cocos2d-x 中单击多次调用
【发布时间】:2017-05-22 17:30:03
【问题描述】:

我正在开发使用 Cocos2d-x 构建的游戏,在我在 iPhone 6S Plus 上测试之前一切正常。在这个特定的设备上,CCTouchesMoved 甚至在单击事件时也被多次调用,而它在其他 iOS 设备上工作正常,你能帮我找出我缺少的东西还是在 iPhone 6S plus 中有什么改变?

void CCLayerPanZoom::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent) {
  CCLOG("CCLayerPanZoom::ccTouchesBegan");
}
void CCLayerPanZoom::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent) {
 CCLOG("CCLayerPanZoom::ccTouchesMoved");
}

这里ccTouchesMoved被多次调用,这不是正常行为,在其他iOS设备上也不会发生。

【问题讨论】:

  • 你能提供一些代码吗?
  • @Darvydas 我已经编辑了我的问题并添加了一些代码。

标签: iphone cocos2d-x touchesbegan 3dtouch touchesmoved


【解决方案1】:

我找到了答案here

随着 iPhone 6s /6s plus 的推出,引入了一项名为“3D Touch”的新技术。在我拿到新 iPhone 6s 的那天,我在上面测试了我的游戏。

对我来说一切都很好,但是: 1. 有时触摸事件不起作用。 2. 有时触摸事件的工作很荒谬。

经过一周的问题拍摄,我终于发现: 'onTouchMoved' 的函数有时会被调用,即使 2D 中的触摸位置没有改变。是的,触摸位置现在是 3D。并且 z 维度中的触摸位置非常敏感(与 x 和 y 维度中的触摸位置相比)。手指在屏幕上施加的非常轻微的力可能会导致触摸位置在 z 维度上发生变化,并使游戏引擎 (cocos2d-x) 调用 'onTouchMoved' 函数。

但是,最新版本的 cocos2d-x(截至本主题发布日:2015/10/25)尚不支持 3D Touch。因此,您无法访问 z 维度,但会受到它的干​​扰。如果您的任何游戏逻辑只关心触摸位置是否在 2D 中发生了变化,则“onTouchMoved”功能不再可靠。这是我的解决方案:

警告你的玩家轻触屏幕以避免z维度皱眉的触摸位置变化

或者,您可以添加如下代码以避免“onTouchMoved”函数中的代码被意外调用:

void CCLayerPanZoom::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent) {
CCPoint point1 = touch->getLocation();
CCPoint point2 = touch->getPreviousLocation();
if (point1.equals(point2)) {
    return;
}
 CCLOG("CCLayerPanZoom::ccTouchesMoved");
}

getLocation() 或 getPreviousLocation() 返回 Vec2 值,因此您可以非常安全地消除 触摸力参数的干扰情况(触摸在z维度上移动)。

所以,就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多