2016-12-03 4 views
2

Я пишу класс в pygame, чтобы создать объект спрайта, и я бы хотел, чтобы его вращали. Он отлично работает с изображением и вращается без проблем. Но при вращении поверхности с обычным цветом коробка, кажется, растет и сжимается. Я знаю, что это результат изменения размера поверхности, чтобы соответствовать вершинам прямоугольника внутри, но как его остановить? Я бы хотел увидеть визуальную ротацию.Как повернуть поверхность в pygame, не меняя ее формы

Я создал образец кода, чтобы показать проблему, с которой я столкнулся, ее запуск заставляет окно просто изменять размер.

import sys, pygame 
from pygame.locals import * 

pygame.init() 
SCREEN = pygame.display.set_mode((200, 200)) 
CLOCK = pygame.time.Clock() 

surface = pygame.Surface((50 , 50)) 
surface.fill((0, 0, 0)) 
rotated_surface = surface 
rect = surface.get_rect() 
angle = 0 

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

    SCREEN.fill((255, 255, 255)) 
    angle += 5 
    rotated_surface = pygame.transform.rotate(surface, angle) 
    rect = rotated_surface.get_rect(center = (100, 100)) 
    SCREEN.blit(rotated_surface, (rect.x, rect.y)) 

    pygame.display.update() 
    CLOCK.tick(30) 

Как исправить эту проблему, чтобы поверхность вращалась так, как я хочу?

Любая помощь будет оценена!

ответ

4

Вы должны создать объекты поверхности, которые вы создаете, для штамповки на поверхности дисплея способом, которым они используют информацию о прозрачности (то есть - они должны иметь альфа-канал).

Чтобы сделать это, просто вопрос о передаче соответствующего флага при создании объектов на поверхности - просто замените это:

surface = pygame.Surface((50 , 50)) 

с:

surface = pygame.Surface((50 , 50), pygame.SRCALPHA) 

и он должен работать.