Заморозка переменной через time.sleep() не работает
Форумчане, вечер добрый, есть функция shoot, цикл которой должен засыпать на время, но при добавлении time.sleep() весь код перестает работать.
def shoot():
global by
while by > -20:
by-=5
screen.blit(bulletimage, (bx+21, by))
by = 550
Вот весь код:
import pygame as pg
import time
pg.init()
screen = pg.display.set_mode((600,700))
FPS = 60
clock = pg.time.Clock()
ex = 0
enmoveside = 'right'
bx = 0
by = 550
px = 250
#Загрузка спрайтов
bulletimage = pg.image.load('bullet.png')
shipimage = pg.image.load('angryship.png')
friendlyshipimg = pg.image.load('friendlyship.png')
bgimg = pg.image.load('bg_cosmo.png')
#Функция выстрела
def shoot():
global by
while by > -20:
by-=5
screen.blit(bulletimage, (bx+21, by))
by = 550
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
quit
#отрисовка бэкграунда
screen.blit(bgimg, (0, 0))
#Проверка нажатия мыши и запуск функции выстрела
mpressed = pg.mouse.get_pressed()
if mpressed[0]:
bx = px
shoot()
#отрисовка спрайтов
screen.blit(shipimage, (ex,250))
screen.blit(friendlyshipimg, (px,550))
#movement
key = pg.key.get_pressed()
if key[pg.K_a]:
px -= 5
if key[pg.K_d]:
px += 5
#barriers
if px < 0:
px = 0
if px > 500:
px = 500
#enemy move
if enmoveside == 'right':
ex += 2
if ex > 500:
enmoveside = 'left'
else:
ex -= 2
if ex < 0:
enmoveside = 'right'
clock.tick(FPS)
pg.display.update()
Ответы (3 шт):
импортируйте модуль time
time.sleep(t)t — это количество секунд, на которое выполнение должно быть приостановлено(в секундах). Если Вы не укажите t, то вылезет, вроде, ошибка
TypeError: time.sleep() takes exactly one argument (0 given)
import time
start = time.time()
def shoot():
end = time.time() - start
if end >= 1:
global by
while by > -20:
by-=5
screen.blit(bulletimage, (bx+21, by))
by = 550
start = time.time()
В чем заключается вопрос? Если вы про то - почему код зависает, то все логично. Игра - бесконечный цикл в котором бесконечно повторяются функции. Засовываешь в функцию time.sleep - останавливаешь весь код, ведь цикл бесконечно пока истинно True будет выполнять эту функцию и слипать цикл, т.е саму игру на 1 секунду.