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帧