pygame图形旋转教程

要学习如何旋转图形,首先要学习一下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。