我如何拥有每秒更改标签的计时器? Xcode 6

How do I have a timer that changes a Label every second? Xcode 6

我制作了一个 NSTimer 并且我使它成为每秒 运行 一个方法,它有一个整数,每次加一个并放入 SKLabelNode 但它永远不会改变。这是代码。 (对不起,如果我弄糊涂了)

> #import "GameScene.h"
> 
> @implementation GameScene
> 
> -(void)didMoveToView:(SKView *)view {
>     /* Setup your scene here */
>     
>     [NSTimer timerWithTimeInterval:1
>                                     target:self
>                                     selector:@selector(timerMethod)
>                                     userInfo:nil
>                                     repeats:YES];
>     
>     timeAlive = [SKLabelNode labelNodeWithFontNamed:@"Arial"];
>     timeAlive.text = @"Time Alive: 0 Seconds";
>     timeAlive.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
>     
>     character = [SKSpriteNode spriteNodeWithImageNamed:@"Character"];
>     character.position = CGPointMake(CGRectGetMidX(self.frame)/2 - 150, CGRectGetMidY(self.frame)/2);
>     
>     enemy = [SKSpriteNode spriteNodeWithImageNamed:@"Character"];
>     enemy.name = @"enemy";
>     enemy.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame)/2);
>     
>     [self addChild:timeAlive];
>     
>     [self addChild:character];
>     [self addChild:enemy];
>      }
> 
> -(void) timerMethod{
>     
>     timeAlive.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
>     timeAliveString = [NSString stringWithFormat:@"Time Alive: %d Seconds", timeAliveInt];
>     //timeAliveString = [@(timeAliveInt) stringValue];
>     timeAlive.text = timeAliveString;
>     timeAliveInt = 1;
>      }
> 
> -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
>     /* Called when a touch begins */
>     
>     for (UITouch *touch in touches) {
>         CGPoint location = [touch locationInNode:self];
>         
>         
>         
>     } }
> 
> -(void)update:(CFTimeInterval)currentTime {
>     /* Called before each frame is rendered */ }
> 
> @end

(我在Header中定义了变量class)

您想要 scheduledTimerWithInterval 而不是 timerWithTimeInterval。那,以及保留对您创建的计时器的引用,应该可以解决您的问题。

不要在 SpriteKit 中使用 NSTimer。它们不适用于 SpriteKit。例如设置SKScenepaused属性时,NSTimer不会自动暂停。您可以改用 SKActions。

SKAction *waitAction = [SKAction waitForDuration:1];
SKAction *callTimerAction = [SKAction runBlock:^{
    [self timerMethod];
}];

SKAction *sequence = [SKAction sequence:@[callTimerAction, waitAction]];
SKAction *foreverRepeatSequence = [SKAction repeatActionForever:sequence];

[self runAction:foreverRepeatSequence];