2016-04-05 4 views
2

Ich habe begonnen, Pygame zu lernen und ich kodiere eine einfache analoge Uhr.Einfache analoge Uhr verlangsamt dann Fehler zeigt sich mit 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

Aber meine hand_clock langsamer und langsamer immer für eine Weile stoppt dann zu laufen und sagt:

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 

Offenbar mache ich etwas so falsch, aber ich konnte es nicht Figur Was ist falsch.

+0

Es ist weil, wenn Sie in anderen Schritten als 90 Grad drehen, wird es Ihre Bildgröße vergrößern, um das neue gedrehte Bild zu halten – Keatinge

+0

Vergrößern Sie den Bildschirm, so dass es groß genug für das Bild ist, oder ein kleineres Bild verwenden, weil Wie Racialz sagt, vergrößern die Rotationen die Größe des Bildes. – marienbad

Antwort

0

Das Problem ist die minute_hand = rotate(minute_hand, -1)

Dies ist das letzte Frames Bild mit dem nächsten zu erzeugen, das bedeutet eine ganze Ladung von Transformationsdaten jedesmal speichert er aktualisiert. Es gab mir auch eine ‚Nicht genügend Speicher Fehler‘ und wie Sie feststellen, das Bild verursacht im Laufe der Zeit zu erhalten verzerrt

Die Lösung zu halten, ist das Originalbild mit und dreht es

unten gezeigt:

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) 

Dies nimmt einen Winkel, der jeden Rahmen und wendet sie auf die ursprünglichen

hoffe, das hilft ändert.