保存 pygame 显示为 pygame.Subsurface
Saving pygame display as pygame.Subsurface
我创建了一个程序,可以将小图块打印到屏幕上。我的游戏循环的每次迭代都会重新打印这些图块。它按原样运行良好,但我认为如果我在速度较慢的计算机上使用更多图块可能会导致问题。我改进它的想法是将所有瓷砖保存为连接的次表面而不是单独的次表面。这样一来,我只需将一个次表面打印到与 x 多个对象相对的显示器上。 这就是屏幕的外观。 如何将屏幕保存为次表面?
实现这个很简单。首先,将您的地图构建操作从游戏循环中取出并放在之前。其次,在地图被 blit 后(我假设是你的屏幕,但任何表面都可以工作),只需将该表面作为变量。
示例:
map = screen.subsurface(screen.get_rect())
然后在你的游戏循环结束时,在 blit 任何其他项目之前简单地 blit 这张地图。
screen.blit(map,(0,0))
screen.blit(player.image,(player.rect.x,player.rect.y))
for monster in monster_list:
screen.blit(monster.image,(monster.rect.x,monster.rect.y)) # of course if you're using sprites, it's be best to just use group.draw()
pygame.display.update()
这样所有实体最终都会出现在您的地图表面之上。
我创建了一个程序,可以将小图块打印到屏幕上。我的游戏循环的每次迭代都会重新打印这些图块。它按原样运行良好,但我认为如果我在速度较慢的计算机上使用更多图块可能会导致问题。我改进它的想法是将所有瓷砖保存为连接的次表面而不是单独的次表面。这样一来,我只需将一个次表面打印到与 x 多个对象相对的显示器上。
实现这个很简单。首先,将您的地图构建操作从游戏循环中取出并放在之前。其次,在地图被 blit 后(我假设是你的屏幕,但任何表面都可以工作),只需将该表面作为变量。
示例:
map = screen.subsurface(screen.get_rect())
然后在你的游戏循环结束时,在 blit 任何其他项目之前简单地 blit 这张地图。
screen.blit(map,(0,0))
screen.blit(player.image,(player.rect.x,player.rect.y))
for monster in monster_list:
screen.blit(monster.image,(monster.rect.x,monster.rect.y)) # of course if you're using sprites, it's be best to just use group.draw()
pygame.display.update()
这样所有实体最终都会出现在您的地图表面之上。