Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 标签未更改倒计时计时器SpriteKit目标C?_Objective C_Sprite Kit_Sklabelnode - Fatal编程技术网

Objective c 标签未更改倒计时计时器SpriteKit目标C?

Objective c 标签未更改倒计时计时器SpriteKit目标C?,objective-c,sprite-kit,sklabelnode,Objective C,Sprite Kit,Sklabelnode,编辑第2号,好的,我想我现在已经把这个问题归结到了要点上。我已经使用了您的所有建议,并使用断点进行了测试,所以谢谢您 我需要做的最后一点就是运行这个等待操作 if (timerStarted == YES) { [countDown runAction:[SKAction waitForDuration:1]]; if (countDownInt > 0) { countDown.text = [NSString stringWithFormat:@"%i", c

编辑第2号,好的,我想我现在已经把这个问题归结到了要点上。我已经使用了您的所有建议,并使用断点进行了测试,所以谢谢您

我需要做的最后一点就是运行这个等待操作

if (timerStarted == YES) {

    [countDown runAction:[SKAction waitForDuration:1]];
    if (countDownInt > 0) {
    countDown.text = [NSString stringWithFormat:@"%i", countDownInt];
    countDownInt = countDownInt - 1.0;
    [self Timer];

    }else{
        countDown.text = [NSString stringWithFormat:@"Time Up!"];
    }
runAction:部分似乎不起作用。我猜这是因为我选择了错误的节点来代替(SKLabelNode“倒计时”)。我可以使用哪个节点运行此代码


感谢所有迄今为止帮助过我的人

我不会使用更新方法。使用SKActions创建计时器。例如

id wait = [SKAction waitForDuration:1];
id run = [SKAction runBlock:^{
    // After a second this is called
}];
[node runAction:[SKAction sequence:@[wait, run]]];
即使这只运行一次,如果您希望每隔一秒或任何时间间隔被调用,也可以将其嵌入到SKActionRepeatForever中。 资料来源:
下面是一个如何在SpriteKit中实现倒计时的示例

首先,声明一个方法,该方法创建1)一个标签节点以显示剩余时间,2)相应的操作以更新标签,等待一秒钟,然后冲洗/起泡/重复

- (void) createTimerWithDuration:(NSInteger)seconds position:(CGPoint)position andSize:(CGFloat)size {
    // Allocate/initialize the label node
    countDown = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
    countDown.position = position;
    countDown.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeLeft;
    countDown.fontSize = size;
    [self addChild: countDown];
    // Initialize the countdown variable
    countDownInt = seconds;
    // Define the actions
    SKAction *updateLabel = [SKAction runBlock:^{
        countDown.text = [NSString stringWithFormat:@"Time Left: %ld", countDownInt];
        --countDownInt;
    }];
    SKAction *wait = [SKAction waitForDuration:1.0];
    // Create a combined action
    SKAction *updateLabelAndWait = [SKAction sequence:@[updateLabel, wait]];
    // Run action "seconds" number of times and then set the label to indicate
    // the countdown has ended
    [self runAction:[SKAction repeatAction:updateLabelAndWait count:seconds] completion:^{
        countDown.text = @"Time's Up";
    }];
}
然后调用带有持续时间(以秒为单位)和标签位置/大小的方法

CGPoint location = CGPointMake (CGRectGetMidX(self.view.frame),CGRectGetMidY(self.view.frame));
[self createTimerWithDuration:20 position:location andSize:24.0];

我不知道如何用上面的代码实现这一点,所以无论你想在哪里启动计时器。创建一个等待的操作(以您想要的时间间隔)。然后,第二个动作是当你等了x个时间后你想做的事情。您可以将倒计时标签代码的设置放在该运行块中,并在保存当前时间的某个位置减少一个int。然后再做一个动作,永远重复这些动作。在与标签相同的代码块内进行检查,如果currentTime Wait打扰了您,我应该将什么对象作为节点?您当前所在的场景。出了什么问题?只要timeLeft>0,您就可以在每帧创建一个全新的标签节点,而无需删除旧的标签节点。一秒钟后,你会得到大约60个标签。您应该有一个标签,并且只更新该标签的文本属性。