2

我正在尝试创建一个在淡入时飞到场景中心的盒子,但是 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,这些操作也不会运行。

编辑:代码中没有任何删除操作的调用。我不知道为什么他们不开火!

4

2 回答 2

3

我弄清楚是什么导致了它,这是我的 endGame 函数中的一行代码,将物理世界速度设置为 0

-(void)endGame {

    isGameOver = YES;

    self.speed = 0.0;
}

注释掉self.speed = 0.0解决了这个问题。哎呀...

于 2014-03-23T21:40:43.003 回答
1

不要以这种方式运行操作

如果您希望它们按顺序工作,请使用顺序操作

SKAction *sequence = [SKAction sequence:@[moveTo,fadeIn]];
[container runAction:sequence];

如果您希望他们同时工作,请使用组操作

SKAction *group = [SKAction group:@[moveTo,fadeIn]];
[container runAction:group];

让我知道这是否不能解决您的问题...但是您应该以这种方式执行操作


更新

添加后,update:请确保 ConditionplayerLives == 0 && isGameOver == NO只为真一次。因为您update:可以在一秒钟内被调用 60 次,这将导致result一秒钟内被创建 60 次

于 2014-03-22T15:57:49.493 回答