我正在使用pygame
创建Python游戏。游戏运行正常,但是我向游戏中添加角色的次数越多,游戏速度就越慢。我该如何解决?
这是主要代码:
finish = False
background_x = 0
background_y = 0
REFRESH_RATE = 180
background = pygame.image.load(BACKGROUND_IAMGE)
while not finish:
clock.tick(REFRESH_RATE)
SCREEN.blit(background, (background_x, background_y))
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
block_on_right = False
block_on_left = False
is_player_on_block = False
for block in blocks:
block.load_image(background_x)
if player.is_crash(block):
for i in range(player.vy):
if player.get_bottom_y() - i == block.get_y():
is_player_on_block = True
if player.y + i == block.get_bottom_y():
player.set_jump(False)
for i in range(player.vx):
if player.get_right_x() - i == block.get_x():
block_on_right = True
if player.x + i == block.get_right_x():
block_on_left = True
for monster in monsters:
if monster.is_crash(block):
monster.turn_around()
keys = pygame.key.get_pressed()
if (keys[pygame.K_UP] or keys[pygame.K_SPACE] or keys[pygame.K_w]) and not player.is_mid_air():
player.set_jump(True)
if (keys[pygame.K_RIGHT] or keys[pygame.K_d]) and not block_on_right:
if player.get_direction() != "right":
player.turn_around()
player.set_walk(True)
background_x -= player.vx
player.x += player.vx
if (keys[pygame.K_LEFT] or keys[pygame.K_a]) and not block_on_left:
if player.get_direction() != "left":
player.turn_around()
player.set_walk(True)
if background_x != 0:
background_x += player.vx
player.x -= player.vx
if not any(keys):
player.stand_still()
player.set_walk(False)
for monster in monsters:
SCREEN.blit(monster.get_image(), (background_x + monster.get_x(), monster.get_y()))
monster.step()
if player.get_bottom_y() == FLOOR_Y or is_player_on_block:
player.set_is_mid_air(False)
else:
player.set_is_mid_air(True)
player.fall()
player.check_jump()
player_image = player.get_image().convert()
player_image.set_colorkey(PINK)
SCREEN.blit(player_image, (player.x + background_x, player.y))
pygame.display.flip()
pygame.quit()
答案 0 :(得分:1)
我不是有效减少执行时间的专家,但是有一些技巧(请参阅它们是否有帮助)。
首先,看看是否可以降低刷新率。
其次,我注意到您每次迭代都在重绘背景。我认为有一种方法可以仅更新屏幕的某些部分。因此,您应该能够绘制一次背景,然后仅在角色所在的屏幕部分重绘。这可能会有所帮助,尤其是在您的背景是静态的情况下。
如果仍然比较慢,请查看是否可以减小图像的尺寸(可能是个坏主意,但值得一试)
希望至少其中一些是可以实现的。