2014-12-03 122 views
0

我正在使用pygame在python中進行遊戲。我想知道我是否可以在使用pygame.time.Clock if語句來增加這樣的變量:我可以在if語句中使用pygame.time.Clock嗎?

mainclock = pygame.time.Clock() 
score = 0 

while True: 
    if mainclock == 0: 
     score += 1 

我想爲得分由一個每秒鐘增加,如果我沒有理解時鐘()正確的,這應該工作,但我不知道是否或如何在if語句中使用Clock()。 感謝您提前提供任何幫助。

+0

雖然不是對您的問題的直接回答,但您可能想重新思考如何處理時間。有兩種常用方法:1.恆定的幀長度。 2.可變的幀長。在第一種方法中,您將每個幀視爲一秒的X分數(通常爲60),因此每次只需添加值/ X。在第二種方法中,您將時間增量傳遞給它並將其乘以每秒的值。 – user3820547 2014-12-03 07:55:26

回答

1

對PyGame中的時間和時間測量工作有一個主要的誤解。您可以使用pygame.time.Clock(),但採用完全不同的方式。

注意:這裏所有的代碼示例都是Python 3.4;如果您仍然使用Python 2.x並且使用代碼時遇到問題,請隨時詢問。

的一些基本知識

你的腳本運行儘可能地快,所以基本上與您的操作系統的每一個滴答,你擁有了它處理一次,這是根據計算機的CPU每秒某處大約100倍。

現在出現第二個問題:Clock()是Pygame模塊「時間」中的一個類,它本身沒有任何價值。如果你讓你的程序打印「mainclock」,yield將是:它永遠不會等於0,因此你的if語句永遠不會產生True,因此永遠不會被處理(所以絕不會把1加到「score」)。

你瞭解這部分?如果沒有,請隨時提出進一步的問題!這些是你必須理解的一些非常基礎的東西,以便基本上使用任何編程語言(至少是面向對象的)。

如何解決您的問題

您需要pygame.time.Clock()爲了解決您的問題,但在比你做了什麼不同的方式。定義一個變量爲您的遊戲的時鐘,就像你用「mainclock」確實已經:

mainclock = pygame.time.Clock() 

時鐘()類有一個方法「.tick()」。此方法測量自上次打勾後的時間。試一試:將您的代碼更改爲此並查看它打印的內容!

while True: 
    print(mainclock.tick()) 

或者在Python 2.x的: 而真: 打印mainclock.tick()

您將收到每個腳本已被處理時間的值(這就是所謂的 「嘀」)。在我的電腦這個打印了幾個數字:

>>> 
0 
35 
1 
2 
2 
1 
1 
1 
2 

等等

這是毫秒,因爲腳本已經處理的最後時間。這意味着:當1000毫秒的時間過去了,整整一秒鐘過去了。現在將其用於我們的目的,我們只需將它們添加在一起即可!

mainclock = pygame.time.Clock() 
tick_count = 0 
score = 0 

while True: 
    tick_count += mainclock.tick() 
    if tick_count >= 1000: 
     score += 1 
     tick_count = 0 
     print(score) 

另一種方法是限制幀速率。這可以通過在Clock()的「.tick()」方法中添加數字值來完成。

while True 
    mainclock.tick(60) 

這將導致你的腳本運行從來沒有超過60次第二快(建議:使你的腳本打印mainclock.tick(60),看看它產生!)。現在,我們可以做兩件事情:要麼我們採取這一事實,併除以60一秒或我們仍然測量時間,我們以前那樣:

方法之一 - 測量時間爲前

mainclock = pygame.time.Clock() 
tick_count = 0 
score = 0 

while True: 
    tick_count += mainclock.tick(60) 
    if tick_count >= 1000: 
     score += 1 
     tick_count = 0 
     print(score) 

你看,這裏沒有重大改變。我們只是簡單地告訴劇本,每秒不會超過60次,其餘的則保持不變。如果您打印「mainclock.tick(60)」,您現在將在每個循環中接收16或17個值,因爲它會在兩個滴答聲之間等待這段時間,以確保它不會每秒運行60次以上。

方法二 - 除以秒...

因爲我們告訴程序不運行速度比第二快60倍,這也意味着一個刻度爲1/60秒。我們也可以這樣做:

mainclock = pygame.time.Clock() 
tick_count = 0 
score = 0 

while True: 
    tick_count += 1/60 # NOTE: in Python 2.x this has to be: 1.0/60 or 1/60.0! 
    if tick_count >= 1: 
     tick_count = 0 
     score += 1 
     print(score) 

或者:

mainclock = pygame.time.Clock() 
tick_count = 1 
score = 0 

while True: 
    tick_count -= 1/60.0 
    if tick_count <= 0: 
     tick_count = 1 
     score += 1 
     print(score) 

希望,這有助於!否則,請隨時多問。

相關問題