2013-01-13 31 views
-2

我希望我的球在我的比赛中变得更快。在pos你可以选择球的速度。但我希望球每五秒钟就能快一点。 pos = CGPointMake(5.0,4.0); 5秒后5.0应该变成6.0和4.0变成5.0。如何获得这些数字每5秒“计数”? (ObjC; Xcode)

我有一个名为MainInt的计时器。 MainInt是一个计数器,它计算你玩多久没有失去。

还有一个显示计时器的标签。 (IBOutlet中的UILabel *秒; .H)

.M


-(void)viewDidLoad { 

[lastTime setHidden:YES]; 


[super viewDidLoad]; 
// X Speed Y Speed 
pos = CGPointMake(5.0,4.0); // <- these numbers (add 1 each every 5 sec.) 
Speedy = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(doThis) userInfo:nil repeats:YES]; 

} 

/* 




-(void)doThis { 



if(MainInt % 5 == MainInt)  //True every 5th second 
{ 

    pos = CGPointMake(); 
} 

} 
*/ 

回答

1

那么,对于一两件事,MainInt % 5 == MainInt 5秒后永恒的休息。 1-4是MainInt的唯一值,可以使之成真。考虑检查模运营商的工作方式。即使您将此更改为MainInt % 5 == 0,这是正确的,但您仍然需要问自己为什么要检查有关外部异步时间值的任何内容。如果定时器不同步,所有这些都会执行,强制它在每次调用它时都不会执行任何操作,因为您已经将调用之间的延迟设置为5秒。如果你希望一切都很好地同步,你可能应该有一个主要的NSTimer或CADisplayLink负责游戏循环,你可以调用需要在每一帧更新游戏状态的方法。

如果你真的想用这种方式做到这一点,每个事件都有不同的计时器,并且尽量让它们与你的主要时间值保持同步,那么就在这里。

//replace timer line with this one 
Speedy = [NSTimer scheduledTimerWithTimeInterval: 0.1 target:self selector:@selector(doThis) userInfo:nil repeats:YES]; 

//replace body of "doThis" with the following 
if(MainInt % 5 == 0) //True every 5th second 
{ 
    pos = CGPointMake(pos.x + 1, pos.y + 1); 
} 

此外,您应该遵循某种命名约定,并尝试更清楚地命名事情。如果pos是球的速度,不应该把它命名为velocity而不是位置?什么是Speedy,一个实例变量?如果是这样,为什么大写?另外,Speedy是我听过的最不清晰的名字之一,它不是宠物,它是一个变量。 MainInt同样的事情。通常,为类名保留大写名称,并为实例变量,方法和函数使用骆驼大小写。它会让你的代码更清晰。 :)

+0

对不起。我16岁,我的英语并不完美,因为我来自德国:DI试着让我铭记在心,让我可以更容易地记住他们的名字:D但是我会尽力在下一次我的定义中更加清楚,谢谢:) –

+0

@EndritÇallaki无需道歉。我的意思不是要表现居高临下或任何事情。你的英语其实很不错!如果你单独编写代码,最好的办法就是确保你的变量的名字能够提醒你自己的用途。请记住,如果其他人需要阅读您的代码(例如在团队环境中),如果他们能够快速理解您的意图,那也很好。在我看来,大写/小写字母的命名约定是最重要的,所以您可以快速区分不同的事物。 – Metabble

+0

好吧非常感谢你:) –