Как заставить ваш спрайт не воспроизводить себя на экране? Как заставить ваш спрайт исчезнуть или начать снова, как только появится текст?

#python #python-3.x #pygame

#python #python-3.x #pygame

Вопрос:

Итак, я снова застрял, но я использую это в качестве последнего средства, когда после обширных исследований ничего не работает. Пожалуйста, не поджаривайте меня за это, я новичок. Итак, в основном я пытаюсь заставить свой спрайт двигаться (йо-йо), но кадры продолжают реплицироваться, когда йо-йо движется вверх и вниз. Итак, я не знаю, как это исправить. Если йо-йо касается границ игрового окна, он сталкивается и должен отображать текст, а затем игра начинается снова. Однако, когда йо-йо сталкивается с границей окна, он перезапускается, но йо-йо, который застрял, все еще отображается, и появляется новый йо-йо. Текст отображается, но не исчезает через 2 секунды.

    import pygame
   import time
   pygame.init()

   width = 900
   height = 900
   red = (255,0,0)
   text = "game over"

   screem = pygame.display.set_mode((width,height))

   pygame.display.set_caption("yoyo")
   clock = pygame.time.Clock()

   background = pygame.image.load("room.png").convert()
   win.blit(background, [0,0])

   yoyo= pygame.image.load("yoyo.png").convert()


  def Yoyo (x,y):
    win.blit(yoyo, [x,y])


def mainloop():
   x = 87
   y = 90


yc = 0 


  while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Exit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:


    Yoyo(x,y)
    y  = yc

    if y > 23 or y < -90:

    pygame.display.update()
    clock.tick(60)

mainloop()
pygame.quit()
quit()
  

Комментарии:

1. После публикации кода вопроса (или ответа) немедленно выберите то, что вы только что вставили, и либо введите Ctrl K, либо нажмите {} кнопку в интерфейсе редактора. Это позволит правильно отформатировать ваш код без риска появления ошибок отступа при попытке его форматирования вручную.

Ответ №1:

Перерисуйте всю сцену в каждом кадре. Это означает, что вы также должны рисовать фон в каждом кадре.

Draw ( blit ) фон в основном цикле, прежде чем будет нарисовано что-либо еще:

 while not Exit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Exit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                y_change = -5
            elif event.key == pygame. K_DOWN:
                y_change = 5
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                y_change = 0 

  y  = y_change
  if y > 405 or y < -200:
      collision()
  GameLoop() 

  win.blit(bg, [0,0]) # <----- draw background
  Bee(x,y)            # <----- draw the bee on the background

  # [...] all further drawing has to be done here

  pygame.display.update()
  clock.tick(60)