上一篇文章,我们讲解了如何导入图片并绘制到屏幕中,这篇文章,我们趁热打铁,继续深入学习如何用pygame的transform对图片进行各种操作。
这篇文章需要的资源如下:
0.png
Sky.jpg
给出Pygame基本框架代码,这篇文章将在这部分代码的基础上做更多操作
import pygame
from pygame.locals import *
import sys
path="resources/"
class Game:
def __init__(self):
pygame.init()
self.W,self.H=800,800
self.screen=pygame.display.set_mode((self.W,self.H))
pygame.display.set_caption("Window")
def listen(self):
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
def draw(self):
self.screen.fill((255,255,255))
def run(self):
while True:
self.listen()
self.draw()
pygame.display.update()
if __name__ == '__main__':
game=Game()
game.run()
首先,我们来学习如何对图片进行放大缩小
制作一个游戏,我们需要的素材可能与我们需要的大小不同,最常见的就是背景图片不符合窗口大小,这个并不难解决,我们只需要对图片进行缩放即可,我们要将刚刚提供的Sky.jpg绘制到屏幕,但是大小不同,无法填满,现在就需要用到pygame.transform中的scale啦
pygame.transform.scale(surface,size)
surface指surface对象,也就是要进行缩放操作的图片
size指缩放后的大小,在框架中,我们的窗口的宽高是self.W和self.H,我们可以这样写:
首先在初始化函数中引入该图片
self.bg=pygame.image.load(path+"Sky.jpg")
然后用scale方法缩放至窗口大小,注意,scale方法不会在原surface对象上操作,它会返回一个新的surface对象,所以我们要重新定义self.bg
self.bg=pygame.transform.scale(self.bg,(self.W,self.H))
然后在draw中,画出该图片,因为它的左上角就是屏幕的左上角,所以起始坐标为0,0
self.screen.blit(self.bg,(0,0))
还有一个方法和scale很像,叫smoothscale,只是smoothscale可以平滑放大图片,两者没有太大区别,这里不做讲解
transform中有一个可以放大到原来的2倍,scale2x
pygame.transform.scale2x(surface)
我们只需要传入surface即可
实际效果和用scale和smoothscale差不多
接下来,我们来学习如何旋转图片
我们先导入0.png,然后放大并绘制到屏幕中心,在初始化函数中添加如下代码
self.bird=pygame.image.load(path+"0.png")
self.bird=pygame.transform.scale(self.bird,(200,200))
在draw中添加如下代码
rect=self.bird.get_rect()
rect.center=self.W/2,self.H/2
self.screen.blit(self.bird,rect)
然后我们用rotate函数将图片旋转,返回新的图像
pygame.transform.rotate(surface,angle)
angle指旋转角度
我们尝试在初始化函数中这样写
self.bird=pygame.transform.rotate(self.bird,45)
从结果不难发现,图片原来的角度是0°,角度往逆时针方向递增
有一个方法叫rotozoom
pygame.transform.rotozoom(surface,angle,scale)
从字面和参数中我们不难理解,rotozoom用于同时放大和旋转图像,这里不做详解
还有一个常用的方法,叫做flip,用于翻转图像
pygame.transform.flip(surface,flip_x,flip_y)
flip_x和flip_y都是bool类型的变量,表示是否沿着x轴和y轴翻转,True则翻转
沿着x轴翻转,就是水平翻转,沿着y轴翻转则是上下翻转
我们试着就该刚刚代码中对0.png进行旋转的操作,将其改为
self.bird=pygame.transform.flip(self.bird,True,False)
可看到,鸟儿的头朝向了左边
再试着将刚刚写入的代码改为
self.bird=pygame.transform.flip(self.bird,True,True)
可看到,鸟儿上下颠倒了
这篇文章,我们学会了pygame.transform下的一些常用方法
制作不易,喜欢我的文章的话别忘了多多点赞收藏关注哦
谢谢支持~