我正在尝试创建一个飞向场景中心的盒子,同时淡入,但SKAction似乎永远不会运行,任何想法为什么?
-(void)update:(CFTimeInterval)currentTime {
CFTimeInterval delta = currentTime - _previousUpdateTime;
_previousUpdateTime = currentTime;
if (playerLives == 0 && isGameOver == NO) {
[self endGame];
[self moveBallToStartingPosition];
[self displayGameResults];
}
}
....
-(void)displayGameResults {
SKLabelNode *result = [SKLabelNode labelNodeWithFontNamed:@"Helvetica"];
result.color = [UIColor redColor];
result.fontSize = 20;
result.name = @"gameResultsLabel";
result.text = [NSString stringWithFormat:@"Game over! score: %d", playerScore];
SKSpriteNode *container = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:[result calculateAccumulatedFrame].size];
container.alpha = 0.3;
container.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame));
[container addChild:result];
SKAction *moveTo = [SKAction moveTo:CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)) duration:3.0];
SKAction *fadeIn = [SKAction fadeInWithDuration:3.0];
[container runAction:moveTo];
[container runAction:fadeIn];
[self addChild:container];
}
如果我将它们应用于SKLabelNode,则不会执行这些操作。
编辑:代码中没有任何调用删除操作。我不知道他们为什么不开枪!
答案 0 :(得分:3)
我弄清楚导致它的原因是,我的endGame函数中的一行代码将物理世界速度设置为0
-(void)endGame {
isGameOver = YES;
self.speed = 0.0;
}
评论self.speed = 0.0
可以解决问题。糟糕...
答案 1 :(得分:1)
不要以这种方式运行行动
如果您希望它们按顺序工作,请使用序列操作
SKAction *sequence = [SKAction sequence:@[moveTo,fadeIn]];
[container runAction:sequence];
如果您希望它们同时工作,请使用群组操作
SKAction *group = [SKAction group:@[moveTo,fadeIn]];
[container runAction:group];
如果这没有解决您的问题,请告诉我......但是您应该以这种方式执行此操作
添加update:
后,请确保条件playerLives == 0 && isGameOver == NO
只有一次为真。因为update:
可以在一秒钟内被召唤60次,这将导致result
在一秒钟内被创造60次