要学习如何旋转图形,首先要学习一下Rect类。在pygame中有pygame.Rect这个类,它是矩形类。通过它新建一个矩形对象,可以用来代表图形surface对象的坐标,宽度与高度,通常也就是这么做的。
surface有get_rect方法,能获取自己的矩形对象。示例代码如下:
>>> import pygame >>> pygame.init() (6, 0) >>> screen = pygame.display.set_mode((480,360)) >>> square = pygame.Surface((100,100)).convert_alpha() >>> square.fill((0,0,255)) <rect(0, 0, 100, 100)> >>> rect = square.get_rect() >>> rect <rect(0, 0, 100, 100)> >>> screen.blit(square,rect) <rect(0, 0, 100, 100)> >>> pygame.display.update() # 刷新屏幕显示出square >>>
上面新建了screen和square,这是两个surface。运行后,我们能看到一个蓝色的正方形显示在屏幕左上角。
rect有x,y属性,如果把rect.x和rect.y都设为100,我们就能把矩形渲染到坐标为(100,100)的位置了。
>>> rect.x = rect.y = 100 >>> screen.blit(square,rect) <rect(100, 100, 100, 100)> >>> pygame.display.update() # 刷新屏幕显示出square >>>
运行上面的代码,又有一个蓝色的矩形出现了,原先矩形并没有擦除。这是由于我们没有把screen还原成全黑色所造成的,所以它还保留着左上角蓝色正方形。
我们也可以设定矩形的中心点坐标,如rect.centerx = 100的时候,那么这个矩形的x坐标应该是多少呢?矩形的边长是100,它的左上角x坐标就应该是50。
同理,如果用rect.centery = 100设定矩形的中心点y坐标为100时,它的左上角y坐标也是50。
下在我们来测试一下,这回先把screen给黑掉。
>>> screen.fill((0,0,0)) <rect(0, 0, 480, 360)> >>> rect.centerx = 100 >>> rect.centery = 100 >>> screen.blit(square,rect) <rect(50, 50, 100, 100)> >>> pygame.display.update() >>>
如果要对正方形进行旋转的话,pygame.transform.rotate的这个方法能对square进行旋转,它会返回一个新的surface。
这个旋转是以图形的中心点为旋转中心的。旋转后,图形的宽度和高度会发生变化,我们对它进行重新渲染,这样好像square就旋转了。
当然,要在同一个位置进行渲染,所以首先要设定好矩形对象的中心点坐标。以下是让图形进行旋转的代码。
"""pygame图像旋转教程 # 矩形对象有left,right,top,bottom,width,height,centerx,centery等属性,分别对应它的 # 最左x坐标,最右x坐标,最上y坐标,最下y坐标,宽度,高度,中心点x坐标,中心点y坐标值。 """ import math import pygame from pygame.locals import * # 导入pygame定义的常量 width,height = 480,360 pygame.init() screen = pygame.display.set_mode((width,height)) square = pygame.Surface((100,100)).convert_alpha() square.fill((0,255,255)) centerx = width//2 # 中心点x坐标 centery = height//2 # 中心点y坐标 angle = 0 # 旋转角度 running = True while running: event = pygame.event.poll() # 从事件队列中取一个事件 if event.type == QUIT:running = False s = pygame.transform.rotate(square,math.radians(angle)) # 旋转square s_rect = s.get_rect() # 获取surface的矩形对象 s_rect.centerx = centerx # 设定图形的中心点x坐标 s_rect.centery = centery # 设定图形的中心点y坐标 screen.fill((0,0,0)) # 填充screen为黑色 screen.blit(s,s_rect) # 把旋转后的s图形按s_rect之描述贴到screen上 pygame.display.update() # 更新屏幕显示 angle +=1 pygame.quit()
如果要对外部的图形进行旋转,可以用pygame.image.load(图形文件名)加载图像形成surface。