Прежде всего удалите pygame.display.flip()
из player
и fireball
. Этот случай мерцает. Достаточно одного pygame.display.update()
в конце приложения l oop.
Обратите внимание, что огненные шары должны быть блиты при (x, y)
, а не (fb_x, fb_y)
def player(x ,y):
screen.blit(playerImage, (x, y))
def fireball(x, y):
screen.blit(fireballImage, (x, y))
fireball_state = "ready"
Дальнейшее использование pygame.time.Clock()
/ tick()
для контроля флопов в секунду (FPS
):
clock = pygame.time.Clock()
#mainloop
running = True
while running:
clock.tick(FPS)
Добавить список для огненных шаров:
fireballs = []
Создает новый огненный шар при нажатии пробел :
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
fireballs.append([x, y, 0, -2])
Обновление и отрисовка огненных шаров в al oop:
for fb in fireballs:
fb[0] += fb[2]
fb[1] += fb[3]
for fb in fireballs:
fireball(fb[0],fb[1])
См. Пример:
fireballs = []
FPS = 60
clock = pygame.time.Clock()
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
fireballs.append([x, y, 0, -2])
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
y -= 2
if pressed[pygame.K_s]:
y += 2
if pressed[pygame.K_a]:
x -= 2
if pressed[pygame.K_d]:
x += 2
for i in range(len(fireballs)-1, -1, -1):
fb = fireballs[i]
fb[0] += fb[2]
fb[1] += fb[3]
if fb[1] < 0:
del fireballs[i]
screen.fill((255,255,255))
player(x,y)
for fb in fireballs:
fireball(fb[0],fb[1])
pygame.display.update()