Изображения Pygame были нарисованы, но не видны, как ожидалось, в цикле while.Python

Программы на Python
Anonymous
Изображения Pygame были нарисованы, но не видны, как ожидалось, в цикле while.

Сообщение Anonymous »

У меня есть следующий код

Код: Выделить всё

import pygame

def draw_bar(surface, position, size, color_border, color_background, color_health, progress):
pygame.draw.rect(surface, color_background, (*position, *size))
pygame.draw.rect(surface, color_border, (*position, *size), 1)
innerPos  = (position[0]+1, position[1]+1)
innerSize = (int((size[0]-2) * progress), size[1]-2)
pygame.draw.rect(surface, color_health, (*innerPos, *innerSize))

class Player:
def __init__(self, image_name, position, window, max_hp):
self.image = pygame.image.load(image_name).convert_alpha()
self.image = pygame.transform.scale(self.image,
(int(self.image.get_width() * 0.5),
int(self.image.get_height() * 0.5)))
self.window = window
self.position = position
self.rect = self.image.get_rect(center=self.position)
self.max_hp = max_hp
self.current_hp = self.max_hp

def draw_health_bar(self, surf):
health_rect = pygame.Rect(0, 0, self.image.get_width(), 10)
health_rect.midbottom = self.rect.centerx, self.rect.top
draw_bar(surf, health_rect.topleft, health_rect.size,
(0, 0, 0), (255, 0, 0), (0, 255, 0), self.current_hp / self.max_hp)

def draw(self):
self.window.fill((0, 0, 0))
self.window.blit(self.image, (self.position[0] - self.image.get_width()/2, self.position[1] - self.image.get_height()/2))

window = pygame.display.set_mode((300, 300))
character = Player('player.png', [150, 150], window, 80)
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False

damage = int(input('enter number:'))
character.current_hp -= damage

character.draw()                        #1
character.draw_health_bar(window)       #2
pygame.display.flip()                   #3
Когда он был выполнен, я увидел только черное окно.
[img]https: //i.sstatic.net/UmnV0aRE.png[/img]

Если я добавил дополнительные строки (#1, #2 и #3) ПЕРЕД циклом While, нарисованные изображения были видно. Однако когда я ввел 10 в приглашение для ввода (таким образом, current_hp уменьшилось до 70), зеленая полоса не обновилась (чтобы она стала уже, чтобы показать красный цвет фона). Только когда я СНОВА ввел 10 в строке ввода (

Код: Выделить всё

current_hp
теперь было 60), то зеленая полоса обновилась правильно, как и ожидалось.

Код: Выделить всё

... (same as the block of code above)
window = pygame.display.set_mode((300, 300))
character = Player('player.png', [150, 150], window, 80)
character.draw()                    #1 additional
character.draw_health_bar(window)   #2 additional
pygame.display.flip()               #3 additional
run = True
while run:
... (same as the block of code above)
Изображение

Только такое расположение кода будет работать идеально, как и ожидалось.

Код: Выделить всё

window = pygame.display.set_mode((300, 300))
character = Player('player.png', [150, 150], window, 80)
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False

character.draw()
character.draw_health_bar(window)
pygame.display.flip()

damage = int(input('enter number:'))
character.current_hp -= damage
Это настолько сбивает с толку, что я не могу этого понять. Может кто-нибудь объяснить мне, как будто мне 5 лет?

Подробнее здесь: https://stackoverflow.com/questions/786 ... while-loop

Вернуться в «Python»