如何使用 Pygame 绘制图像?我知道如何加载它们。
我制作了一个空白窗口。
当我使用
screen.blit(blank, (10,10))
时,它不会绘制图像,而是将屏幕留空。
这是一个典型的布局:
myimage = pygame.image.load("myimage.bmp")
imagerect = myimage.get_rect()
while 1:
your_code_here
screen.fill(black)
screen.blit(myimage, imagerect)
pygame.display.flip()
图像由 "pygame.Surface" 对象表示。可以使用 pygame.image.load
:从图像创建Surface
my_image_surface = pygame.image.load('my_image.jpg')
但是,Pygame 文档指出:
返回的 Surface 将包含与其来源文件相同的颜色格式、颜色键和 alpha 透明度。您经常需要不带参数调用
,以创建一个可以在屏幕上更快绘制的副本。convert()
对于 Alpha 透明度(如 .png 图像),请在加载后使用方法,以便图像具有每像素透明度。convert_alpha()
使用适当的转换方法以获得最佳性能:
image_surface = pygame.image.load('my_image.jpg').convert()
alpha_image_surface = pygame.image.load('my_icon.png').convert_alpha()
可以使用 blit
方法在另一个 Surface
上绘制或与另一个Surface 混合。 blit 的第一个参数是应该绘制的 Surface 。第二个参数是表示左上角的元组 (x, y) 或矩形。对于矩形,仅考虑矩形的左上角。应该提到的是,窗口分别显示也由Surface表示。因此,在窗口中绘制 Surface 与在 Surface 上绘制 Surface 相同:
window_surface.blit(image_surface, (x, y))
window_surface.blit(image_surface,
image_surface.get_rect(center = window_surface.get_rect().center))
最小示例:
import pygame
pygame.init()
window = pygame.display.set_mode((300, 300))
clock = pygame.time.Clock()
pygameSurface = pygame.image.load('apple.png').convert_alpha()
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
window.fill((127, 127, 127))
window.blit(pygameSurface, pygameSurface.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
pygame.image.load
可以加载大多数图像。根据文档,支持以下格式:JPG、PNG、GIF(非动画)、BMP、PCX、TGA(未压缩)、TIF、LBM(和 PBM)、PBM(和 PGM、PPM)、XPM。
如果你想在 Pygame 中使用加载了其他库的图像,请参阅:
有关加载 可缩放矢量图形 (SVG) 文件的信息,请参阅:
加载动画 GIF 文件位于:
或者查看如何加载 NumPy 帧:
用途:
import pygame, sys, os
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((100, 100))
player = pygame.image.load(os.path.join("player.png"))
player.convert()
while True:
screen.blit(player, (10, 10))
pygame.display.flip()
pygame.quit()
它加载文件
player.png
。
运行它,效果完美。
在绘图表面上使用
blit
或任何其他更新后,您必须调用 pygame.display.flip()
来实际更新显示的内容。