如何在Pygame中绘制图像和精灵?
我该如何使用Pygame绘制图像呢?我知道怎么加载它们。
我已经创建了一个空白的窗口。
当我使用 screen.blit(blank, (10,10))
时,图像没有显示出来,屏幕还是空白的。
4 个回答
使用:
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
的文件。
运行这个代码,它会完美地工作。
图像在Pygame中是通过“pygame.Surface”对象来表示的。你可以使用pygame.image.load
从图像创建一个Surface:
my_image_surface = pygame.load.image('my_image.jpg')
不过,Pygame的文档提到:
返回的Surface会保持与原文件相同的颜色格式、颜色键和透明度。通常你会想调用
convert()
,这样可以创建一个在屏幕上绘制时更快的副本。
对于像.png这样的透明度图像,加载后使用convert_alpha()
方法,这样图像就会有每个像素的透明度。
为了获得最佳性能,使用合适的转换方法:
image_surface = pygame.load.image('my_image.jpg').convert()
alpha_image_surface = pygame.load.image('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帧:
这是一个典型的布局:
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()