2013-10-11 2 views
5

Я новичок в pygame и хочу написать код, который просто поворачивает изображение на 90 градусов каждые 10 секунд. Мой код выглядит следующим образом:Повернуть изображение, используя pygame

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() 

Этот код не работает т.е. изображение не вращается, хотя «вращающийся» печатается в терминале через каждые 10 секунд. Может кто-нибудь сказать мне, что я делаю неправильно?

ответ

7

pygame.transform.rotate не будет вращать Surface на месте, а скорее возвращать новое, повернутое Surface. Даже если это изменит существующий Surface, вам придется снова разжечь его на поверхности дисплея.

Что нужно сделать, так это отслеживать угол в переменной, увеличивать его на 90 каждые 10 секунд и накладывать новый экран Surface на экран, например.

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)) 
     ... 
Смежные вопросы