按特定顺序执行一系列命令的最佳方法是什么?我一直对ObjC中执行的并发性感到沮丧。这是其中一种情况,我意识到我是一名设计师,而不是一名“真正的”编码员。
我正在iOS上试验SpriteKit,当能量计达到<= 0时,我想要发生一系列事情。
我的问题发生在新场景被调用之前我有机会看到最后一次爆炸。
以下是相关代码:
- (void) doGameOver
{
damageIndicator.progress = 0;
energyLeft.text = @"Energy:0%";
GameOver *newScene = [[GameOver alloc]initWithSize:self.size];
newScene.timeElapsed = [started timeIntervalSinceNow];
[self.view presentScene:newScene transition:[SKTransition fadeWithColor:[SKColor whiteColor] duration:1]];
[damageIndicator removeFromSuperview];
}
- (void) makeExplosionWithSize:(float)myBoomSize inPosition:(CGPoint)boomPosition
{
NSString *myFile = [[NSBundle mainBundle] pathForResource:@"explosion" ofType:@"sks"];
SKEmitterNode *boom = [NSKeyedUnarchiver unarchiveObjectWithFile:myFile];
boom.position = boomPosition;
boom.particleSize = CGSizeMake(myBoomSize, myBoomSize);
[self addChild:boom];
[self runAction:self.playMySound];
}
- (void)adjustScoreWithDamage:(float)hitDamage atPosition:(CGPoint)pos
{
_damage = _damage -(hitDamage);
if (_damage < 0) {
//these are the two things I need to execute sequentially
[self makeExplosionWithSize:500 inPosition:pos];
[self doGameOver]
}
}
我尝试过使用bools的方案(gameOver = YES),但我想我可能需要创建一个完成处理程序,这只会让我头晕目眩。
有人能建议用最简单的方式来完成此任务吗?
提前谢谢。
答案 0 :(得分:1)
我可能会误解你的目标,但听起来应该是:
要实现这一点,您可能只想使用NSTimer触发“doGameOver”,而不必担心在爆炸完成后立即触发它。
以下是延迟3秒的示例:
NSTimer *gameOverTimer = [NSTimer timerWithTimeInterval:3.0 target:self selector:@selector(doGameOver:) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:gameOverTimer forMode:NSDefaultRunLoopMode];
答案 1 :(得分:1)
最简单(不是最好的)可能是替换
[self doGameOver];
与
[self performSelector:@selector(doGameOver) withObject:nil afterDelay:2.0];