Pygame - blit 导致滞后
Pygame - blit is causing lag
我正在制作一个简单的平台游戏,当我使用 pygame.surface.blit()
添加背景时会导致很多延迟,但是当我使用 pygame.suface.fill()
时它会以 ~120 fps 的速度运行。
我该如何解决这个问题?
# map vars
mapFloor = []
ground = 700
mapController(True)
bg1Colour = bg1Colour = transform.scale(image.load('assets/PNG/Backgrounds/set1_background.png'), (1280, 1024))
bg1Colour = [bg1Colour, bg1Colour.get_rect()]
bg1Tiles = transform.scale(image.load('assets/PNG/Backgrounds/set1_tiles.png'), (1280, 1024))
bg1Tiles = [bg1Tiles, bg1Tiles.get_rect()]
bg1Hills = transform.scale(image.load('assets/PNG/Backgrounds/set1_hills.png'), (1280, 1024))
bg1Hills = [bg1Hills, bg1Hills.get_rect()]
while not finished:
for events in event.get():
exiCheck()
playerController(True)
surface.blit(bg1Colour[0], bg1Colour[1])
surface.blit(bg1Tiles[0], bg1Tiles[1])
surface.blit(bg1Hills[0], bg1Hills[1])
mapController(False)
player = playerController(False)
display.flip()
clock.tick(120)
只是尽量不使用列表或元组尝试通过分配它们,以便终端不检查列表而只使用带符号的值
确保背景Surface与显示Surface的格式相同。使用 convert()
(or convert_alpha()
) 创建具有相同像素格式的 Surface。当背景为 blit
显示时,这提高了性能,因为格式兼容并且 blit
不需要执行隐式转换。
bg_surf = image.load('assets/PNG/Backgrounds/set1_background.png').convert()
bg1Colour = bg1Colour = transform.scale(bg_surf, (1280, 1024))
我正在制作一个简单的平台游戏,当我使用 pygame.surface.blit()
添加背景时会导致很多延迟,但是当我使用 pygame.suface.fill()
时它会以 ~120 fps 的速度运行。
我该如何解决这个问题?
# map vars
mapFloor = []
ground = 700
mapController(True)
bg1Colour = bg1Colour = transform.scale(image.load('assets/PNG/Backgrounds/set1_background.png'), (1280, 1024))
bg1Colour = [bg1Colour, bg1Colour.get_rect()]
bg1Tiles = transform.scale(image.load('assets/PNG/Backgrounds/set1_tiles.png'), (1280, 1024))
bg1Tiles = [bg1Tiles, bg1Tiles.get_rect()]
bg1Hills = transform.scale(image.load('assets/PNG/Backgrounds/set1_hills.png'), (1280, 1024))
bg1Hills = [bg1Hills, bg1Hills.get_rect()]
while not finished:
for events in event.get():
exiCheck()
playerController(True)
surface.blit(bg1Colour[0], bg1Colour[1])
surface.blit(bg1Tiles[0], bg1Tiles[1])
surface.blit(bg1Hills[0], bg1Hills[1])
mapController(False)
player = playerController(False)
display.flip()
clock.tick(120)
只是尽量不使用列表或元组尝试通过分配它们,以便终端不检查列表而只使用带符号的值
确保背景Surface与显示Surface的格式相同。使用 convert()
(or convert_alpha()
) 创建具有相同像素格式的 Surface。当背景为 blit
显示时,这提高了性能,因为格式兼容并且 blit
不需要执行隐式转换。
bg_surf = image.load('assets/PNG/Backgrounds/set1_background.png').convert()
bg1Colour = bg1Colour = transform.scale(bg_surf, (1280, 1024))