2013-10-11 25 views
5

Ich bin neu in Pygame und möchte einen Code schreiben, der ein Bild alle 10 Sekunden um 90 Grad dreht. Mein Code sieht wie folgt aus:Bild mit pygame drehen

import pygame 
    import time 
    from pygame.locals import * 
    pygame.init() 
    display_surf = pygame.display.set_mode((1200, 1200)) 
    image_surf = pygame.image.load("/home/tempuser/Pictures/desktop.png").convert() 
    imagerect = image_surf.get_rect() 
    display_surf.blit(image_surf,(640, 480)) 
    pygame.display.flip() 
    start = time.time() 
    new = time.time() 
    while True: 
     end = time.time() 
     if end - start > 30: 
      break 
     elif end - new > 10: 
      print "rotating" 
      new = time.time() 
      pygame.transform.rotate(image_surf,90) 
      pygame.display.flip() 

dieser Code nicht arbeitet, dh das Bild wird nicht dreht, obwohl „rotierend“ alle 10 Sekunden in dem Endgerät gedruckt wird. Kann mir jemand sagen, was ich falsch mache?

Antwort

7

pygame.transform.rotate wird nicht die Surface an Ort und Stelle drehen, sondern eher eine neue, gedrehte Surface. Selbst wenn es die bestehenden Surface ändern würde, müssten Sie es wieder auf der Anzeigeoberfläche blit.

Was Sie tun sollten, ist es, den Winkel in einer Variablen zu verfolgen, erhöhen Sie es alle 10 Sekunden um 90, und blit die neue Surface auf dem Bildschirm, z.

angle = 0 
... 
while True: 
    ... 
    elif end - new > 10: 
     ... 
     # increase angle 
     angle += 90 
     # ensure angle does not increase indefinitely 
     angle %= 360 
     # create a new, rotated Surface 
     surf = pygame.transform.rotate(image_surf, angle) 
     # and blit it to the screen 
     display_surf.blit(surf, (640, 480)) 
     ...