Cocos2d x 如何防止用户在Cocos2dx中连续触摸

Cocos2d x 如何防止用户在Cocos2dx中连续触摸,cocos2d-x,Cocos2d X,我需要一些关于Cocos2dx中这些问题的想法 如何防止用户连续触摸。例如,我连续射击子弹,我想有一个延迟约1秒,即使我连续按触摸。我的意思是不停地触摸,而不是不停地触摸 如何检测保持触摸事件是否发生 1:当您的子弹开火时,您可以设置一个布尔值(例如bulletPassing)来通知您应该忽略触摸(您在CCTouchBegind方法中使用它)。然后创建一个动作,当一秒钟过去时通知您。假设您的类名为MyLayer,您有一个函数bulletDelayPassed,该函数将设置为布尔值: bool A

我需要一些关于Cocos2dx中这些问题的想法

  • 如何防止用户连续触摸。例如,我连续射击子弹,我想有一个延迟约1秒,即使我连续按触摸。我的意思是不停地触摸,而不是不停地触摸

  • 如何检测保持触摸事件是否发生


  • 1:当您的子弹开火时,您可以设置一个布尔值(例如bulletPassing)来通知您应该忽略触摸(您在CCTouchBegind方法中使用它)。然后创建一个动作,当一秒钟过去时通知您。假设您的类名为MyLayer,您有一个函数bulletDelayPassed,该函数将设置为布尔值:

    bool ArmourTest::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
        if( !bulletPassing ){
           this->runAction( CCSequence::create( CCDelayTime::create(1), 
               CCCallFunc::create(this, callfunc_selector(MyLayer::bulletDelayPassed)), NULL) );
           bulletPassing = true;
           shootBullet(); 
        }
        isTouching = true;
        ...
    }
    
    void MyLayer::bulletDelayPassed(){
        bulletPassing = false;
    }
    
    2:最好的方法是创建一个布尔值,告诉您触摸处于活动状态(例如iTouching),您可以在CCTouchBegind方法中将其设置为true,在ccTouchEnded方法中将其设置为false。如果需要测量触摸保持的时间,则应计划更新并更新CCTouchStart中设置为0的某个时间变量,并且仅在触摸布尔值为真时更新:

    void MyLayer::update( float dt ){
       if( isTouching ) touchDuration += dt;
    }
    

    你能澄清如果不触摸和保持,持续触摸意味着什么吗?你的意思是不断地窃听吗?@Bikush是的,就是这样。这个密码放在哪里?我不认为在CCTouchStart中是一个好地方->运行操作(CCSequence::create(CCDelayTime::create(1),CCCallFunc::create(this,callfunc_选择器(MyLayer::bulletDelayPassed)),NULL));这条线你应该放在你射出子弹的任何地方。我会在触摸时射出子弹,但我不想让它继续射出。我在答案中添加了一个扩展。