如何在继续之前添加延迟

时间:2013-05-18 23:29:44

标签: ios objective-c cocos2d-iphone

在普通的obj-c或cocos2d中是否有办法在if-else块内进行延迟? 喜欢

if ([self isValidTileCoord:cTileCoord] && ![self isWallAtTileCoord:cTileCoord])
{
    [self addChild:circle0];
    //wait two seconds
    //perform another task
}

在两个任务之间等待或停止操作只是一个简单的延迟。有没有简单的方法来做到这一点?

3 个答案:

答案 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];