2013-01-13 34 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

好吧非常感謝你:) –