1

普通的 obj-c 或 cocos2d 有没有办法在if-else块内进行延迟?像

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

只是在两个任务之间等待一个简单的延迟,或者停止一个动作。有什么简单的方法可以做到这一点吗?

4

3 回答 3

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;
    });
}
于 2013-05-18T23:49:58.890 回答
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
}
于 2013-05-18T23:38:52.663 回答
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];
于 2013-05-19T06:33:19.540 回答