如何在pygame中旋转曲面,而不改变其形状

时间:2016-12-03 15:53:08

标签: python python-3.x rotation 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)

如何解决此问题,让表面旋转我想要的?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

您必须创建您创建的Surface对象,以便在显示器表面上使用透明度信息进行标记(即 - 它们必须具有Alpha通道)。

要做到这一点,只是在创建表面对象时传递适当的标记的问题 - 只需替换它:

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

使用:

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

它应该有用。