Обновление номера в Pygame - PullRequest
3 голосов
/ 30 апреля 2020

У меня довольно простая проблема. Я хочу обновлять значение один раз в секунду, и мой код делает это. Обновленный номер отображается за поверхностью, хотя порядок должен быть правильным.

Как я могу сделать так, чтобы оно показывалось сверху?

(я нарисовал круг, чтобы увидеть, находится ли он позади или впереди круга, если я не делаю screen.fill)

Кроме того, я был бы признателен, если бы числа не отображались друг на друга, но я могу решить это сам, как только решу другую проблему.

Код:

import pygame
from pygame.locals import *

pygame.init()
display_width = 1600
display_height = 800

color = 23,52,85
color2 = 43,200,8

screen = pygame.display.set_mode((display_width,display_height))

wood = 0

myFont = pygame.font.SysFont('Arial', 25)
someEvent = pygame.key.get_pressed()

MOVEEVENT = pygame.USEREVENT+1
t = 1000
pygame.time.set_timer(MOVEEVENT,t)

def increaseWood():
  global wood
  wood+=3
  print("The wood was increased")
  return wood

def drawEverySecond():
  text = "Wood: " + str(increaseWood())
  label = myFont.render(text,1,color2)
  screen.blit(label, (1000,300))
  print('Current Wood:', wood)

while True:
  pygame.display.update()
  screen.fill(color)
  pygame.draw.circle(screen, (220,40,100),(1000,300), 20,4 )
  #drawEverySecond()

  for event in pygame.event.get():
      #print(event)
      if event.type == pygame.QUIT:
          pygame.display.quit()
          quit()
      if event.type == MOUSEBUTTONDOWN:
          print("Mouse was pressed!")
      if event.type == MOVEEVENT:
        drawEverySecond()

1 Ответ

3 голосов
/ 30 апреля 2020

Вы должны увеличивать число и отображать поверхность label один раз в секунду (каждый раз, когда происходит MOVEEVENT):

label = label = myFont.render("Wood: 0", 1, color2) 
def drawEverySecond():
    global label
    text = "Wood: " + str(increaseWood())
    label = myFont.render(text,1,color2)  
    print('Current Wood:', wood)

Но вы должны нарисовать поверхность label в вечный кадр:

while True:
    pygame.display.update()
    screen.fill(color)
    pygame.draw.circle(screen, (220,40,100),(1000,300), 20,4 )
    screen.blit(label, (1000,300))

    # [...]
...