gpt4 book ai didi

ios - 在恢复 SKScene 之前如何倒计时?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:11 26 4
gpt4 key购买 nike

我有一个暂停的 SKScene。当用户要求这样做时,我想恢复场景。但是,我想在游戏开始前给用户几秒钟的准备时间。为此,当用户要求恢复游戏时,我想先从3开始倒计时,然后再恢复场景。

我目前有一个 SKLabel 来指示计数。当用户点击恢复时,我使用一个 NSTimer 从 3 开始倒计时,每秒更新标签的内容,并在计数结束时恢复游戏。

但是,由于游戏暂停,SKLabel 不会每秒更新;一旦游戏恢复,它只会在最后更新一次。我正在寻找解决此问题的方法。

最佳答案

在您的 GameScene 中使用一个通用变量来指示游戏是否暂停,例如 isGamePaused。在您的 update: 方法中,您将拥有:

if(!isGamePaused){
//Do all game logic
}

您可以使用isGamePaused 来暂停和取消暂停游戏。现在,让我们倒计时。我会创建一个 SKNode 的子类,在其中添加 SKLabel 并设置一个委托(delegate),以便我们知道 CountDown 何时结束。例如,在 CountDown.h 中:

@protocol SKCountDownDelegate <NSObject>

-(void)countDown:(id)countDown didFinishCounting:(BOOL) didFinishCounting;

@end

@interface SKCountDown : SKNode

@property (assign, atomic) id<SKCountDownDelegate> delegate;

-(instancetype)initCountDownWithSeconds:(int)seconds andColor:(UIColor *) color andFontName:(NSString *)fontName;

@end

CountDown.m 中:

#import "SKCountDown.h"

@interface SKCountDown()

@property int secondsToGo;
@property SKLabelNode *numberLabel;
@property NSTimer *countTimer;

@end

@implementation SKCountDown

-(instancetype)initCountDownWithSeconds:(int)seconds andColor:(UIColor *)color andFontName:(NSString *)fontName{
if (self = [super init]) {
self.numberLabel = [[SKLabelNode alloc] initWithFontNamed:fontName];
[self.numberLabel setFontColor:color];
[self.numberLabel setFontSize:110];
[self.numberLabel setText:@"3"];
self.secondsToGo = seconds;

[self addChild:self.numberLabel];

self.countTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(count) userInfo:nil repeats:YES];
}
return self;
}

-(void)count{
if (self.secondsToGo > 1) {
self.secondsToGo -= 1;
self.numberLabel.text = [NSString stringWithFormat:@"%i", self.secondsToGo];
}else{
[self.countTimer invalidate];
self.countTimer = nil;
self.numberLabel.text = @"GO!";
[self performSelector:@selector(finish) withObject:nil afterDelay:1];
}
}

-(void)finish{
[self removeFromParent];
[self.delegate countDown:self didFinishCounting:YES];
}

@end

因此,在任何您想添加此 CountDown 的地方,您可以执行以下操作:

-(void)startCountDown{
self.countDown = [[SKCountDown alloc] initCountDownWithSeconds:3 andColor:self.countdownFontColor andFontName:self.countdownFontName];
self.countDown.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
self.countDown.delegate = self;
self.countDown.zPosition = 20;
[self addChild:self.countDown];
}

-(void)countDown:(id)countDown didFinishCounting:(BOOL)didFinishCounting{
isGamePaused = NO;
}

这是一个实现方法的示例。希望对您有所帮助!

关于ios - 在恢复 SKScene 之前如何倒计时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com