2013-10-11 17 views
5

Tôi mới dùng pygame và muốn viết một số mã đơn giản quay một hình ảnh 90 độ sau mỗi 10 giây. Mã của tôi trông giống như sau:Xoay ảnh bằng 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() 

Mã này không hoạt động tức là hình ảnh không xoay, mặc dù "đang quay" được in trong thiết bị đầu cuối sau mỗi 10 giây. Ai đó có thể cho tôi biết tôi đang làm gì sai?

Trả lời

7

pygame.transform.rotate sẽ không xoay Surface tại chỗ, mà là trả lại một mới, xoay Surface. Ngay cả khi nó sẽ thay đổi Surface hiện tại, bạn sẽ phải ghi nó trên bề mặt hiển thị một lần nữa.

Những gì bạn cần làm là theo dõi góc trong một biến, tăng nó lên 90 cứ 10 giây một lần và ghi Surface mới vào màn hình, ví dụ:

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