Если вы хотите изменить положение спрайта на экране, думаю, вам нужно будет перерисовывать его каждый кадр. Убедитесь, что у вас есть функция, которая обрабатывает только перерисовку.
Это функция redrawGameWindow
в моей игре:
def redrawGameWindow():
Screen.fill((0,0,0))
for s in stars:
s.draw(Screen)
if Switch == 1:
Screen.blit(game_title, game_title_rect)
new_game_button.draw(Screen)
settings_button.draw(Screen)
credits_button.draw(Screen)
elif Switch == 2:
if boss_fight:
Screen.blit(boss_health, boss_health_rect)
for b in bullets:
b.draw(Screen)
for b in enemy_bullets:
b.draw(Screen)
for e in enemies:
e.draw(Screen)
player.draw(Screen)
Screen.blit(health, (15, int(health_text_y)))
Screen.blit(health_fleet, (15, int(health_fleet_text_y)))
elif Switch == 3:
Screen.blit(game_over_text, game_over_text_rect)
restart_button.draw(Screen)
elif Switch == 4:
player.draw(Screen)
Screen.blit(health, (15, int(health_text_y)))
Screen.blit(health_fleet, (15, int(health_fleet_text_y)))
Screen.blit(summary_text_money, summary_text_money_rect)
elif Switch == 5:
if switch_settings == 0:
Screen.blit(settings_text, settings_text_rect)
audio_settings_button.draw(Screen)
keybind_settings_button.draw(Screen)
back_settings_button.draw(Screen)
elif switch_settings == 1:
Screen.blit(audio_settings_text, audio_settings_text_rect)
Screen.blit(music_volume_text_1, music_volume_text_1_rect)
Screen.blit(music_volume_text_2, music_volume_text_2_rect)
Screen.blit(sfx_volume_text_1, sfx_volume_text_1_rect)
Screen.blit(sfx_volume_text_2, sfx_volume_text_2_rect)
music_volume_up_button.draw(Screen)
music_volume_down_button.draw(Screen)
sfx_volume_up_button.draw(Screen)
sfx_volume_down_button.draw(Screen)
back_settings_button.draw(Screen)
elif switch_settings == 2:
Screen.blit(keybind_settings_text, keybind_settings_text_rect)
back_settings_button.draw(Screen)
for button in keybind_settings_button_list:
button.draw(Screen)
if keybind_change_title:
pygame.draw.rect(Screen, (70,70,70), (0, resolution[1]//2-40, resolution[0], 80))
Screen.blit(key_change_text, key_change_text_rect)
elif Switch == 6:
Screen.blit(credits_text, credits_text_rect)
Screen.blit(credits_text_1, credits_text_1_rect)
Screen.blit(credits_text_2, credits_text_2_rect)
Screen.blit(credits_text_3, credits_text_3_rect)
back_settings_button.draw(Screen)
elif Switch == 7:
Screen.blit(pause_text, pause_text_rect)
resume_button.draw(Screen)
settings_button.draw(Screen)
elif Switch == 8:
shop_1.draw(Screen)
player.draw(Screen)
if show_shop_button:
shop_button.draw(Screen)
if show_next_level_button:
next_level_button.draw(Screen)
elif Switch == 9:
current_shop_item = shop_items[item_index]
Screen.fill((50,50,50))
pygame.draw.rect(Screen, (30,30,30), (0, 60, resolution[0], resolution[1] - 285))
back_button.draw(Screen)
next_button.draw(Screen)
previous_button.draw(Screen)
buy_button.draw(Screen)
current_shop_item.draw()
pygame.display.update()
Она довольно длинная, но не вообще влияют на производительность игры. Не беспокойтесь о необходимости перерисовывать все в каждом кадре, если только это не ДЕЙСТВИТЕЛЬНО много всего. их в вашу программу, таким образом они все будут оптимизированы, и ваша программа будет работать намного быстрее. Пример:
bg_11 = pygame.image.load("sprites/backgrounds/bg_11.png").convert()
player_s = pygame.image.load("sprites/characters/player.png").convert_alpha()