在普通的obj-c或cocos2d中是否有办法在if-else
块内进行延迟?
喜欢
if ([self isValidTileCoord:cTileCoord] && ![self isWallAtTileCoord:cTileCoord])
{
[self addChild:circle0];
//wait two seconds
//perform another task
}
在两个任务之间等待或停止操作只是一个简单的延迟。有没有简单的方法来做到这一点?
答案 0 :(得分:3)
有很多方法可以做到这一点。我会用GCD
if ([self isValidTileCoord:cTileCoord] && ![self isWallAtTileCoord:cTileCoord])
{
[self addChild:circle0];
//wait two seconds
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
//perform another task;
});
}
答案 1 :(得分:2)
您可以使用performSelector: withObject: afterDelay:
方法延迟任务:
if ([self isValidTileCoord:cTileCoord] && ![self isWallAtTileCoord:cTileCoord])
{
[self addChild:circle0];
//wait two seconds
[self performSelector:@selector(continueTask) withObject:nil afterDelay:2.0];
}
在选择器方法中:
-(void)continueTask
{
//perform another task
}
答案 2 :(得分:1)
在cocos2d中,您还可以在节点上运行Action,例如
[self runAction:[CCSequence actions:[CCDelayTime actionWithDuration:2.0],[CCCallFunc actionWithTarget:self selector:@selector(anothertaks)],nil]];
执行选择器也可以工作,但问题是cocos2D的所有调度程序在应用程序转到后台时暂停,但另一方面执行选择器仍将计算时间,因此有时它会创建任务,动画等同步问题。
执行选择器:
[self performSelector:@selector(continueTask) withObject:nil afterDelay:2.0];