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

时间:2014-03-06 02:39:56

标签: cocos2d-x

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

  1. 如何防止用户持续触摸。例如,我连续射击子弹,即使我连续按下触摸,我也希望延迟大约1秒。我的意思是持续触摸不要触摸并按住。

  2. 如何检测保持触摸事件?

1 个答案:

答案 0 :(得分:1)

1:当你的子弹开火时你可以设置一个布尔值(例如bulletPassing)来通知你应该忽略触摸(你在ccTouchBegan方法中使用它)。然后你创建一个动作,当一秒钟过去时会通知你。假设您的类名为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:最好的方法是创建一个布尔值来告诉你触摸是活动的(例如isTouching),你在ccTouchBegan方法中将其设置为true,在ccTouchEnded中设置为false。如果您需要测量触摸的持续时间,您应该安排更新并更新在ccTouchBegan中设置为0的时间变量,并且只有在触摸布尔值为true时才更新它:

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