cocos2dx ipad 五指缩小再放大后,应用无响应

本文介绍了Cocos2dx游戏中遇到的五指抓取操作后导致游戏无响应的问题,并提供了具体的解决方案。通过重置特定全局变量来确保后续触摸事件能被正确处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        ipad上,可以用五指抓取,把应用关闭,相当于home的作用,但是如果是抓取缩小,但不完全关闭,再放大,那么应用就会恢复。


        但是在cocos2dx的游戏应用中,有时就会无响应,应用在跑,但是点击什么都没反应。


        一路追下来(人家追的,我是受益者。。。又获取了人家的点子),发现在CCEGLViewProtocol这个文件,有如下定义:

static CCTouch* s_pTouches[CC_MAX_TOUCHES] = { NULL };
unsigned int s_indexBitsUsed = 0;                            /***** 就是他 *****/
static CCDictionary s_TouchesIntergerDict;

static int getUnUsedIndex()
{
    int i;
    int temp = s_indexBitsUsed;

    for (i = 0; i < CC_MAX_TOUCHES; i++) {
        if (! (temp & 0x00000001)) {
            s_indexBitsUsed |= (1 <<  i);
            return i;
        }

        temp >>= 1;
    }

    // all bits are used
    return -1;
}

static void removeUsedIndexBit(int index)
{
    if (index < 0 || index >= CC_MAX_TOUCHES) 
    {
        return;
    }

    unsigned int temp = 1 << index;
    temp = ~temp;
    s_indexBitsUsed &= temp;
}
在五指抓取过后,这个值不会归0,然后就导致后面的点击不会被响应。

        但是,这个地方的上限只有5点,大于5点的多点触控是怎么搞的我不知情,放着以后研究。估计正常人也用不到大于5点的多点


提供一种解法,在appdelegate里面做如下修改:

NS_CC_BEGIN
extern unsigned int s_indexBitsUsed;
NS_CC_END

void AppDelegate::applicationWillEnterForeground()
{
    s_indexBitsUsed=0;     /****** here ****/
    CCDirector::sharedDirector()->startAnimation();
    
    if(CocosDenshion::SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())// 如果正在播放则恢复
        CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeAllEffects();

}
        其实就是手动重置而已,因为他是个全局变量。



FYI:我看这一段的时候还乌了个龙,找了N久,都只发现了get和remove,没找到set在哪,找了N久,才发现get的时候就自加1了。。。真惭愧



忘记说了,原来的代码里面,这个变量是static的,static的全局变量,是限制了只能在此文件访问,所以要去掉static属性,上面的代码是已经改过之后的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值