gpt4 book ai didi

iphone - iOS pong 开发,定时器不会停止

转载 作者:可可西里 更新时间:2023-11-01 05:57:54 25 4
gpt4 key购买 nike

我正在创建一个简单的乒乓球游戏..现在我想设置一个计时器,它会在我松动后停止并可能将值保存到高分,但即使我设法设置了计时器并设置了它,它似乎也不想停止。

我使用本教程实现它: http://www.apptite.be/tutorial_ios_stopwatch.php

现在我的代码是这样的:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (StavHry == StavHryPozastaven) {
TapToBegin.hidden = YES;
StavHry = StavHryAktivni;
} else if (StavHry == StavHryAktivni) {
[self touchesMoved:touches withEvent:event];
}
startDate = [NSDate date];

stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 target:self selector:@selector(updateTimer)userInfo:nil repeats:YES];
}

- (void)updateTimer
{
static NSInteger counter = 0;
StopWatchLabel.text = [NSString stringWithFormat:@"Counter: %i", counter++];

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
StopWatchLabel.text = timeString;
}

当我点击 TapToBegin 标签时,我设置了计时器。但是当我输或赢时,即使我在开始新游戏之前在函数中使用了 invalidate,计时器也会继续运行。(当我开始新游戏时,它会重置)

-(void)reset:(BOOL) novahra { //funkce reset
self.StavHry = StavHryPozastaven;
mic.center = self.view.center;
if(novahra) {
if(skore_hrac_hodnota < skore_pc_hodnota){
TapToBegin.text = @"Protivnik Vyhrál, smůla!";
[stopWatchTimer invalidate];
} else {
TapToBegin.text = @"Vyhráls! Gratulujem!";
[stopWatchTimer invalidate];
}
skore_hrac_hodnota = 0;
skore_pc_hodnota = 0;
} else {
self.StavHry = StavHryAktivni;
//TapToBegin.text = @"Pokračuj!";
}

skore_hrac.text = [NSString stringWithFormat:@"%d", skore_hrac_hodnota];
skore_pc.text = [NSString stringWithFormat:@"%d", skore_pc_hodnota];
}

我知道教程显示了更多行的停止操作代码,但我尝试了更多选项我给了它所有的东西,但我认为这是唯一停止计时器的行,所以它应该可以工作。但事实并非如此。

请帮忙,我星期一要完成这个,所以我有点害怕。

最佳答案

如果 touchesBegan: 被多次调用而 reset: 没有被调用,会发生什么?如果它可能发生,您可能会泄漏一个计时器,它将继续调用您的 updateTimer 方法。

如果您发布的代码工作正常,我会感到有点惊讶,因为计时器方法应该带有参数。那就是将您的计时器选择器更改为 @selector(updateTimer:),然后将方法更改为 - (void)updateTimer:(NSTimer *)timer

关于iphone - iOS pong 开发,定时器不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805037/

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