6-旋转
当我们想要旋转一个图片的时候,
我们可以使用pygame.transform.rotozoom
获得旋转后的图片:
kitten = pygame.transform.rotozoom(kitten, angle, 1)
问题是,每次旋转都会降低图片的质量。如果旋转很多次后,图片的质量会变得很差,甚至会让程序崩溃。
为了解决这个问题,我们每次旋转的时候,都使用原始图片的副本,而不是使用上一次旋转后的图片。
def rotate(surface, angle):
return surface, pygame.transform.rotozoom(surface, angle,1)
while True:
...
angle += 1
kitten, kitten_rotated = rotate(kitten, angle)
kitten_rotated_rect = kitten_rotated.get_rect(center=(100,100))
screen.blit(kitten_rotated, kitten_rotated_rect)
...
另一个可能遇到的问题:
显示图片时,会默认有透明度。但如果显示rgb表面时,会看到黑色背景。
kitten = pygame.Surface((200,200))
kitten.fill((255,0,0))
...
解决办法是设置透明度:
kitten = pygame.Surface((200,200), pygame.SRCALPHA)
kitten.fill((255,0,0))
案例
旋转图片。
import sys
import pygame
pygame.init()
clock = pygame.time.Clock()
width, height = 800, 600
# Display surface
screen = pygame.display.set_mode((width, height))
kitten = pygame.image.load("kitten.jpg")
#pygame.Surface((200,200), pygame.SRCALPHA) #kitten.fill((255,0,0))
kitten = pygame.transform.scale(kitten, (200, 200))
kitten_rect = kitten.get_rect(center=(100,100))
angle = 0
def rotate(surface, angle):
return surface, pygame.transform.rotozoom(surface, angle,1)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill((255, 255,255)) # 将screen填充为白色
angle += 1
kitten, kitten_rotated = rotate(kitten, angle)
kitten_rotated_rect = kitten_rotated.get_rect(center=(100,100))
screen.blit(kitten_rotated, kitten_rotated_rect)
pygame.display.flip() # 更新屏幕画面
clock.tick(30) # 控制游戏速率,每秒x帧