如何在 Pygame 中绘制图像和精灵?
- 2024-12-13 08:36:00
- admin 原创
- 175
问题描述:
如何使用 Pygame 绘制图像?我知道如何加载它们。
我制作了一个空白窗口。
当我使用时screen.blit(blank, (10,10))
,它不会绘制图像,而是使屏幕空白。
解决方案 1:
这是一个典型的布局:
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()
解决方案 2:
图像由“pygame.Surface”对象表示。可以使用以下方法从图像创建Surfacepygame.image.load
:
my_image_surface = pygame.image.load('my_image.jpg')
但是,Pygame 文档指出:
返回的 Surface 将包含与其来源文件相同的颜色格式、colorkey 和 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()
使用该方法,可以在一个Surface上绘制或与另一个Surfaceblit
混合。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 中使用通过其他库加载的图像,请参阅:
PIL 和 pygame.image
如何将 OpenCV(cv2)图像(BGR 和 BGRA)转换为 pygame.Surface 对象
有关加载可缩放矢量图形(SVG) 文件的信息,请参阅:
Pygame 应用程序中的 SVG 渲染
加载动画 GIF 文件的步骤如下:
如何在 Pygame 中加载动画 GIF 并获取所有单独的帧?
如何在 Pygame 中将精灵制作成 GIF 图像?
或者看看如何加载NumPy框架:
Pygame 和 NumPy 动画
解决方案 3:
使用:
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
。
运行它并且它完美运行。
解决方案 4:
在您的绘图表面上使用blit
或任何其他更新后,您必须调用pygame.display.flip()
来实际更新显示的内容。