我对cocos2d-x v3有一个非常奇怪的问题,前15个触摸左右未在我的iOS设备上注册(尝试了iPad 2和iPad air)。一旦触摸最终注册,一切正常(也就是触发onTouch功能后的所有触摸)。
触摸事件在模拟器中完美运行。 此外,相同的代码在我的Windows和Android版本中完美运行。
有没有人发生这种情况,或者可能知道是什么原因造成的?
我正在使用监听器,并且我调试到touchesBegan将输入事件转发给监听器的位置,但即使在第15次敲击之后事件也不会进入。
这真的很奇怪......而且我想我会在这里试一试,因为在开始剥离代码尽可能干净之前,有人可能也遇到过这种情况,然后尝试从我的方式回来那里...
亲切的问候, 迈克尔
编辑:根据要求,这里有一些代码。理想的行为是它可以在iOS设备中运行:首先触摸触发onTouchBegan。
我没有添加它,因为它认为它不重要,因为代码适用于Android。 但我很感激你想看到它,以防万一我可能错过了什么
GameLayer是一个Cocos2d :: Layer。
void GameLayer::onEnter()
{
cocos2d::CCLayer::onEnter();
// Register Touch Event
auto pEventDispatcher = cocos2d::Director::getInstance()->getEventDispatcher();
if (pEventDispatcher)
{
// Touch listener
auto pTouchListener = cocos2d::EventListenerTouchOneByOne::create();
if (pTouchListener)
{
pTouchListener->setSwallowTouches( true );
pTouchListener->onTouchBegan = CC_CALLBACK_2( GameLayer::onTouchBegan, this );
pTouchListener->onTouchMoved = CC_CALLBACK_2( GameLayer::onTouchMoved, this );
pTouchListener->onTouchEnded = CC_CALLBACK_2( GameLayer::onTouchEnded, this );
pTouchListener->onTouchCancelled = CC_CALLBACK_2( GameLayer::onTouchCancelled, this );
pEventDispatcher->addEventListenerWithSceneGraphPriority( pTouchListener, this );
}
}
}
bool GameLayer::onTouchBegan( cocos2d::Touch* pTouch, cocos2d::Event* /*pEvent*/ )
{
// Breakpoint here triggers fine on first touch for Android/Windows/iOS Simulator,
// but not on iOS device (iPad/iPhone)
bool breakHere = true;
<<snip actual code>>
}
编辑: 问题是std :: ofstream试图在iOS设备上打开()(很可能是在它无法访问的文件夹中)。
答案 0 :(得分:0)
我的游戏中有很多层次,我不像你那样做。在你的代码中,需要在本地获取EventDispatcher并像你一样创建触摸监听器对我来说似乎很奇怪。我从未在这么多步骤中看到它。
我做:
auto listener = cocos2d::EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = [&](cocos2d::Touch* touch, cocos2d::Event* event)
{
return true;
};
listener->onTouchEnded = [=](cocos2d::Touch* touch, cocos2d::Event* event)
{
// ... do something
};
cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 31);
答案 1 :(得分:0)
我修好了。
问题似乎完全不相关,我试图打开一个std :: ofstream文件(我的日志文件),很可能是在它没有(任何和/或写入)访问权限的文件夹中。 iOS设备上不需要,也不需要。
一旦我将IOS添加到排除列表中(就像Android和更多目标一样),一切都开始变得完美。
我不知道到底出了什么问题,以及为什么它会在几次触摸输入后开始工作,但我猜它正在等待或在后台重试某些内容。
我在调试另一个时遇到了问题:) 希望这可以帮助其他任何可能遇到相同或相关问题的人。
亲切的问候, 迈克尔