我制作了一款目前存在帧速率问题的游戏。我确实认为问题是我正在加载的图像数量相当大,所以我的问题是:“有没有办法预加载图像?所以基本上在加载它们之前加载它们?”
我不知道这是否可行,但听起来不错。所以基本上没有任何东西被吸引到屏幕上,但图像准备就绪没有任何延迟(或最小)。
答案 0 :(得分:4)
是的,这很简单。
最简单的方法是创建一个将用作缓存的dict
,以及一个从该缓存加载图像的方法:
image_cache = {}
def get_image(key):
if not key in image_cache:
image_cache[key] = pygame.image.load(key)
return image_cache[key]
(如果您需要更多功能,可以为此创建一个类。)
现在,当您想要使用图像时,请使用get_image
功能:
class Player(object):
def __init__(self):
self.image = get_image('image1.png')
如果要一次又一次地使用同一图像,所有图像现在都会在加载后重新缓存并重复使用。
要在启动时预加载所有图像,您可以自己创建所有图像的列表
images = ['image1.png', 'image2.png', 'image3.png']
或简单获取特定文件夹中所有图像的文件名
import glob
images = glob.glob('*.png')
并加载所有图像一次:
# ensure all images are loaded
for image in images:
get_image(image)
另请注意,另一个常见的瓶颈是字体渲染,这非常昂贵。您可以使用相同的技术缓存使用Font.render
创建的字体表面(使用简单的dict
)。