如何在pygame中只对背景进行一次blit?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在pygame中只对背景进行一次blit?相关的知识,希望对你有一定的参考价值。
我正在制作一个平台游戏,并且在遇到背景时我遇到了一个问题。在我目前的代码中,游戏循环在每一帧的游戏窗口上绘制背景,这使得当我想使用任何不仅仅是纯色的背景时游戏真的很滞后。我的问题是我如何只对背景进行一次(如果可能的话),这样游戏就不会减速太多。
以下是我的Game类的一些部分导致blitting图像:
class Game:
def __init__(self):
pg.init()
pg.mixer.init()
self.bg = pg.image.load("background.jpg")
self.screen = pg.display.set_mode((WIDTH, HEIGHT))
pg.display.set_caption(TITLE)
self.clock = pg.time.Clock()
self.running = True
self.font_name = pg.font.match_font(FONT_NAME)
self.pillarhp = 100
def new(self):
self.run()
def run(self):
self.clock.tick(FPS)
self.playing = True
while self.playing:
self.clock.tick(FPS)
self.events()
self.update()
self.draw()
def draw(self):
now = pg.time.get_ticks()
self.screen.blit(self.bg, [0, 0])
self.screen.blit(self.island, [0,0])
self.all_sprites.draw(self.screen)
self.draw_text("Score: " + str(self.score), 20, BLACK, 40, 20)
self.draw_text("Pillar HP: " + str(self.pillarhp), 20, BLACK, 40, 50)
pg.display.flip()
答案
调用背景表面的convert
方法,例如
self.bg = pg.image.load("background.jpg").convert()
这将改善性能。
对于具有每像素透明度的图像,您可以使用convert_alpha
方法,但使用convert
方法转换的图像将更快地进行blitting。
以上是关于如何在pygame中只对背景进行一次blit?的主要内容,如果未能解决你的问题,请参考以下文章