我正在开发使用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设备上发生。
答案 0 :(得分:1)
我找到了答案here
随着iPhone 6s / 6s plus的推出,一项名为“3D Touch'介绍。我拿到新iPhone 6s的那天,我在上面测试了我的游戏。
一切都适合我,但是: 有时触摸事件是行不通的。 有时触摸事件可笑。
经过一周的拍摄问题,我终于找到了: onTouchMoved' onTouchMoved'的功能即使2D中的触摸位置没有改变,有时也会调用。是的,触摸位置现在是3D。并且z维度中的触摸位置非常敏感(与x和y维度中的触摸位置相比)。从手指向屏幕施加非常轻微的力可能会导致触摸位置在z维度上发生变化,并使游戏引擎(cocos2d-x)调用onTouchMoved'的功能。
然而,cocos2d-x的最新版本(截至本主题发布日期:2015/10/25)尚未支持3D Touch。因此,您无法访问z维度,但会受到它的干扰。如果您的任何游戏逻辑仅涉及2D中的触摸位置是否已更改,则onTouchMoved' 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维度上移动)。
所以,那就是它。