2017-01-20 2 views
0

Я использую cocos2d-х 3.10, в этой версии можно легко обрабатывать onTouchBegan, onTouchMoved, onTouchEnd, onTouchCancel что-то вроде этогоC++ в любом случае обращаться onTouchHolding

_touchListener = EventListenerTouchOneByOne::create(); 
_touchListener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this); 
_touchListener->onTouchCancelled = CC_CALLBACK_2(GameScene::onTouchCancel, this); 
_touchListener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this); 
_touchListener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this); 

Но как onTouchHolding? многие благодарят друзей

+0

Не 'hold' начинаются с' begin' и остановить с 'end'? – Danh

ответ

0

Нет onTouchHolding, потому что нет никакого события, которое срабатывает, когда ничего не происходит (т. е. не двигает пальцем).

Если вы хотите посмотреть, сколько времени было проведено, вы можете установить флаг в onTouchBegan. В вашем методе update вы увеличиваете переменную-член на dt, если этот флаг установлен. В onTouchEnded вы должны установить флаг.

Что-то вроде этого:

void GameScene::update(float dt) 
{ 
    if (_touchInProgress) 
    { 
     _holdTime += dt; 
    } 
} 

bool GameScene::onTouchBegan(Touch *touch, Event *event) 
{ 
    _holdTime = 0.0; 
    _touchInProgress = true; 
    return true; 
} 

void GameScene::onTouchEnded(Touch *touch, Event *event) 
{ 
    _touchInProgress = false; 
    if (_holdTime > kMyHoldTimeThreshold) 
    { 
     // Do something awesome 
    } 
}