bool sign2 = true;
bool sign2 = true;
void GameLayer::onTouchMoved(Touch *touch, Event *unused){
if(sign){
sign = false;
**
if(sign2){
CCLOG("RUNNING!");
sign2 = false;
sign = true;
}else{
sign2 = true;
}
** }
}

假设上述代码顺序执行,则会出现无限循环的RUNNING的LOG:

RUNNING!

RUNNING!

......

但实际上并不会出现无限个running,仅仅可能出现一个或者两个RUNNING!

推測:

触摸时onTouchMoved会多次被调用,进入if(sign)推断里面的不止一个触摸事件。这样即sign被赋值true后又被赋值false,则出现无法再进入外推断体的情况。

04-16 08:29