Objective c 标签未更改倒计时计时器SpriteKit目标C?
编辑第2号,好的,我想我现在已经把这个问题归结到了要点上。我已经使用了您的所有建议,并使用断点进行了测试,所以谢谢您 我需要做的最后一点就是运行这个等待操作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
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个标签。您应该有一个标签,并且只更新该标签的文本属性。