栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Pygame 学习笔记】4.Transform 图片的操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Pygame 学习笔记】4.Transform 图片的操作

上一篇文章,我们讲解了如何导入图片并绘制到屏幕中,这篇文章,我们趁热打铁,继续深入学习如何用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下的一些常用方法

制作不易,喜欢我的文章的话别忘了多多点赞收藏关注哦

谢谢支持~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号