SKAction无法正常工作

时间:2014-03-22 15:48:25

标签: sprite-kit skaction

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

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

2 个答案:

答案 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次