2016-04-05 46 views
2

我已經開始學習pygame,並且我編寫了一個簡單的模擬時鐘。簡單的模擬時鐘變慢然後Pygame出現錯誤

import sys, pygame 
pygame.init() 

white = 255, 255, 255 
size = width, height = 480, 480 
screen = pygame.display.set_mode(size) 

minute_hand = pygame.image.load('minute_hand.png') 
minute_hand_rect = minute_hand.get_rect() 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    center = minute_hand_rect.center 
    rotate = pygame.transform.rotate 

    minute_hand = rotate(minute_hand, -1) 
    minute_hand_rect = minute_hand.get_rect(center=center) 

    screen.fill(white) 
    screen.blit(minute_hand, minute_hand_rect) 

    pygame.display.update() 
    pygame.time.delay(100) 

This is my hand_minute

但我hand_clock得到了一會兒慢然後停止運行,並說:

Traceback (most recent call last): 
    File "clock.py", line 21, in <module> 
    minute_hand = rotate(minute_hand, -1) 
pygame.error: Width or height is too large 

顯然,我做的事情錯了,但我想不出哪裏不對。

+0

這是因爲當您以90度以外的增量旋轉時,它會放大圖像大小以容納新的旋轉後的圖像 – Keatinge

+0

增加屏幕的大小,使其足夠大,或使用較小的圖像,正如Racialz所說,旋轉會增加圖像的大小。 – marienbad

回答

0

問題是minute_hand = rotate(minute_hand, -1)

這是通過使用最後幀的圖像以產生下一個,這意味着在每次更新時間存儲變換的數據的整個負載。這也給了我一個「內存不足錯誤的」和你會發現會造成圖像會變形隨着時間的推移

的解決方案是使用原始圖像,以保持和旋轉更

顯示如下:

import sys, pygame 
pygame.init() 

white = 255, 255, 255 
size = width, height = 480, 480 
screen = pygame.display.set_mode(size) 

minute_hand = pygame.image.load('box4.jpg') 
minute_hand_rect = minute_hand.get_rect() 

angle = 0 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

    center = minute_hand_rect.center 
    rotate = pygame.transform.rotate 

    new_image = rotate(minute_hand, angle) 
    new_image_rect = new.get_rect(center=center) 

    angle -= 1 
    if angle == -360: 
     angle = 0 

    screen.fill(white) 
    screen.blit(new, new_rect) 

    pygame.display.update() 
    pygame.time.delay(100) 

這需要改變每一幀,並將其應用到原來的

希望這有助於一個角度。

相關問題