赞
踩
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。
私信我发送消息python资料,领取python crash course中文版PDF。
Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。
之前已经学习了图形绘制,我们可以通过一些命令来绘制图形,但是想完成一个游戏,面对各种各样的NPC,地图场景,很明显这些简单命令是不够的,pygame
提供了图片填充的功能,可以将某些图片直接填充到Surface
对象上。
blit()函数就是填充图片的函数,我们简单了解一下函数的参数与返回值后,编写代码尝试使用。
参数说明:
返回值:
每个示例的代码我都会写上注释,后面就不在单独分析每行代码的作用了,但是关键的函数还是会讲一下。填充函数就了解一个blit(),不同示例只是不同参数的调用。
import pygame # 初始化 pygame.init() # 新建窗口 screen = pygame.display.set_mode((800, 600)) # 命名 pygame.display.set_caption('image blit') # 加载图片 image = pygame.image.load("tree.webp") # 填充 screen.blit(image, (0, 0)) # 更新屏幕 pygame.display.flip() # 点击关闭退出程序,这个后面再讲,代码可以先写上。 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit()
执行文件,出现了一个窗口,但是很奇怪只有蓝天,命名我的图片是树(tree.webp)来着。
是不是我们的图片太大,但是窗口太小导致的呢?
这个问题又该怎么解决呢?
pygame.transform.scale()函数可以解决这个问题。
import pygame
--snip--
# 根据窗口尺寸缩放图片
scaled_image = pygame.transform.scale(image, (800, 600))
# 填充
screen.blit(scaled_image, (0, 0))
--snip--
现在看,图片已经变成适应窗口大小了。
不过这个函数会返回一个新的Surface
对象,也就是说函数是对图片进行了适应窗口的缩放后返回一个新的画布,这种缩放在缩放比例特别大时可能导致图片质量下降,这个时候就需要考虑其他的算法或者库来实现了。不过大多数情况下我们是够用的。
blit函数中area参数可以对图片进行截取,通过area参数定义的矩形,可以对图片进行截取,填充的图片也是截取出来的图片。
special_flags参数则是让目标图片和源图片混合。源图片指的是加载的图片,也就是image代表的画布对象,目标图片指的是接收源图片的图片,就是screen所代表的的窗口画布。
常用取值如下:
这些混合模式可以单独使用,也可以组合在一起使用,通过按位或运算(|)来实现多种效果的叠加。
接下来代码示例。
import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) image = pygame.image.load("tree.webp").convert() # 定义要绘制的图像区域 area = pygame.Rect(500, 500, 300, 300) # 使用BLEND_ADD混合模式 screen.blit(image, (100, 100), area, pygame.BLEND_MAX) # 不使用 screen.blit(image, (400, 100), area) # 更新屏幕 pygame.display.flip() # 点击关闭退出程序,这个后面再讲,代码可以先写上。 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit()
通过代码和结果,我们可以看到,我们填充了两个正方形,并且这两个 正方形的图案是一致的,因为都是从一个顶点坐标,同宽通长截取出来的,但是混合模式啥的,没看出啥情况来来,可能和我图片和背景色有关系。这个我后面慢慢研究,目前来说这个参数用不上,我先不浪费时间纠结这个了。
图片填充功能正常应在图片模块一起讲的,但是昨天讲了图形绘制,顺嘴提了图片填充,仔细看看了先讲后讲差不多,干脆就接着图形绘制讲了。这个讲完就接上图片模块(pygame.image
)的学习。
今天来活了,最近学习不会停,但是记录的笔记可能不会特别长,见谅。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。