在 Pygame 中,你能在没有明显延迟的情况下在每个循环中向屏幕绘制许多精灵吗?
In Pygame, can you draw many sprites to the screen each loop without significant delay?
在我的地图编辑程序中,我有 3 个主要功能。
- 添加精灵
- 正在删除精灵
- 当前选中的精灵跟随鼠标
我遇到的问题是我使用循环遍历所有“添加的精灵”并将它们绘制到屏幕上。由于此循环的 MS 延迟,屏幕上的精灵越多,延迟越明显,绘图越难
while item_list_item_amount > item_list_iterator:
display.blit(pygame.image.load("imgs\tiles\" + sprite_list[item_list_iterator]), (x_list[item_list_iterator] * 16, y_list[item_list_iterator] * 16))
item_list_iterator += 1
每个“Mainloop”循环都会在这些 sprite 上绘制背景,从而使删除/替换 sprite 成为可能。这使得当前需要在每个循环中重新绘制精灵。
循环看起来像这样:
while main_loop == True:
#Main starts loop here
#Update the currently selected tile
display.fill(BGC)
display_listed_tiles()
#Uses mouse coordinates to blit tile over current mouse location
display.blit(tile, (row * 16, col * 16))
screen.blit(pygame.transform.scale(display, WINDOW_SIZE), (0, 0))
#Updates screen
pygame.display.update()
我试过制作一个比较列表,只绘制一次背景,但在删除精灵时仍然存在延迟,我无法使用鼠标功能。
想知道这种情况是否可以解决吗?有什么方法可以压缩需要绘制到一个对象的“精灵列表”,而不必迭代整个数百个列表?感谢您的帮助!
主要问题是您在每一帧中加载图像。 pygame.image.load
是一个非常昂贵的操作,因为它必须从数据存储中读取图像。
初始化加载一次图片,绘图时使用:
surface_list = [pygame.image.load("imgs\tiles\" + name) for name in sprite_list]
for item_list_iterator in range(item_list_item_amount):
display.blit(surface_list[item_list_iterator], (x_list[item_list_iterator] * 16, y_list[item_list_iterator] * 16))
在我的地图编辑程序中,我有 3 个主要功能。
- 添加精灵
- 正在删除精灵
- 当前选中的精灵跟随鼠标
我遇到的问题是我使用循环遍历所有“添加的精灵”并将它们绘制到屏幕上。由于此循环的 MS 延迟,屏幕上的精灵越多,延迟越明显,绘图越难
while item_list_item_amount > item_list_iterator:
display.blit(pygame.image.load("imgs\tiles\" + sprite_list[item_list_iterator]), (x_list[item_list_iterator] * 16, y_list[item_list_iterator] * 16))
item_list_iterator += 1
每个“Mainloop”循环都会在这些 sprite 上绘制背景,从而使删除/替换 sprite 成为可能。这使得当前需要在每个循环中重新绘制精灵。
循环看起来像这样:
while main_loop == True:
#Main starts loop here
#Update the currently selected tile
display.fill(BGC)
display_listed_tiles()
#Uses mouse coordinates to blit tile over current mouse location
display.blit(tile, (row * 16, col * 16))
screen.blit(pygame.transform.scale(display, WINDOW_SIZE), (0, 0))
#Updates screen
pygame.display.update()
我试过制作一个比较列表,只绘制一次背景,但在删除精灵时仍然存在延迟,我无法使用鼠标功能。
想知道这种情况是否可以解决吗?有什么方法可以压缩需要绘制到一个对象的“精灵列表”,而不必迭代整个数百个列表?感谢您的帮助!
主要问题是您在每一帧中加载图像。 pygame.image.load
是一个非常昂贵的操作,因为它必须从数据存储中读取图像。
初始化加载一次图片,绘图时使用:
surface_list = [pygame.image.load("imgs\tiles\" + name) for name in sprite_list]
for item_list_iterator in range(item_list_item_amount):
display.blit(surface_list[item_list_iterator], (x_list[item_list_iterator] * 16, y_list[item_list_iterator] * 16))