简体   繁体   中英

(Pygame) .blit won't display While function

So I'm trying to create a timer in which when the game runs, a number of seconds in which the game had been running would be displayed in my pygame window. But for some reason, it doesn't seem to be working. I'm not quite sure exactly what the issue is.

Line 35-44 is where the timer function is... Line 71 is where the time is expected to display...


import pygame

pygame.init()
pygame.font.init()

FPS = 60
fpsClock = pygame.time.Clock()

time = 10

WHITE = (255,255,255)

dimension = [936, 520]

SCREEN = pygame.display.set_mode(dimension)

font = pygame.font.Font("8-BIT WONDER.TTF",16)

gameEnd= False

#Images
blacksmith = pygame.image.load("blacksmith.png")
blacksmith = pygame.transform.scale(blacksmith,(144,144))

background = pygame.image.load("background_img.png")

#Positions
blacksmith_position = [400,275]

anvil_position = [0,0]

song = pygame.mixer.music.load("Pixelland.mp3")
pygame.mixer.music.play(0, 0.0)

#Time
get_time = True

#Clock
while get_time == True:
    time = pygame.time.get_ticks() / 1000
    pygame.time.delay(1000)

display_time = font.render(time, True, WHITE)

#Game Loop

while not gameEnd:
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
          gameEnd = True



    #Player Controls

   keys = pygame.key.get_pressed()

   if keys[pygame.K_F11]:
       pygame.display.toggle_fullscreen()

   if keys[pygame.K_LEFT]:
       blacksmith_position[0] = max(95, blacksmith_position[0] - 12)

   if keys[pygame.K_RIGHT]:
       blacksmith_position[0] = min(685, blacksmith_position[0] + 12)



   SCREEN.blit(background, (0, 0))
   SCREEN.blit(blacksmith,(blacksmith_position))
   SCREEN.blit(display_time, (70,10))
   pygame.display.update()
   fpsClock.tick(FPS)

pygame.quit()
quit()

You run while get_time == True: which stops everything. It runs all the time.

You can have only one while loop which runs all the time (endless loop) - mainloop .

Working example (without bitmaps and fonts files)

import pygame

# --- constants ---

FPS = 60

WHITE = (255, 255, 255)
BLACK = (  0,   0,   0)

DIMENSION = (936, 520)

# --- classes ---
# empty

# --- functions ---
# empty

# --- main ---

# - init -    

pygame.init()
#pygame.font.init() # pygame.init() should run `pygame.font.init()` automatically
screen = pygame.display.set_mode(DIMENSION)

# - resources - 

font = pygame.font.Font(None, 16)

# - mainloop -

fps_clock = pygame.time.Clock()
game_end = False

while not game_end:

    # - events -

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_end = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_F11
                pygame.display.toggle_fullscreen()

    #keys = pygame.key.get_pressed()

    #if keys[pygame.K_F11]:
    #    pygame.display.toggle_fullscreen()

    # - updates (without draws) -

    # render current time
    cur_time = pygame.time.get_ticks() / 1000
    display_time = font.render(str(cur_time), True, WHITE)

    # - draws (without updates) -

    screen.fill(BLACK)
    screen.blit(display_time, (70,10))
    pygame.display.update()

    # - FPS -

    fps_clock.tick(FPS)

# - end -

pygame.quit()
#quit() # doesn't need it

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM