Я пытаюсь написать код простой игры, в игре есть объект игрока и пол, использующий циклы для его создания. Я не уверен, почему он так быстро теряет кадры. У меня есть часы, которые показывают 60 кадров в секунду, но быстро падают до 15 кадров в секунду. Заранее спасибо!
main.py
black = (0, 0, 0)
blue = (50, 60, 200)
white = (255, 255, 255)
font = pygame.font.Font(None, 30)
window = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Platformer")
gravity = -0.5
player = Player(400, 0)
level1 = [
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]
for y in range(0, len(level1)):
for x in range(0, len(level1[y])):
if level1[y][x] == 1:
blockList.append(Block(x*32, y*32))
window.fill(blue)
for block in blockList:
block.render(window)
player.x += moveX
player.update(gravity, blockList)
player.render(window)
clock.tick(60)
for x in range(0, len(level1[y])):
if level1[y][x] == 1:
blockList.append(Block(x*32, y*32))``` Im pretty sure thats where the error is...
Вы делаете этот двойной цикл level1
каждый кадр? Возможно, это можно переместить в раздел инициализации перед входом в основной цикл. — person Community schedule 13.06.2019
как бы я это сделал? Извините, я новичок в Python — person Community schedule 13.06.2019
Вам нужно будет отредактировать свой вопрос, чтобы включить весь код или, по крайней мере, основной цикл. Невозможно предложить изменения без большей части кода. — person Community schedule 13.06.2019
Здесь есть хороший момент для учебы. Один из первых шагов в оптимизации кода — исключить ненужные математические вычисления из циклов. Как предлагается в комментарии, если вы запускаете этот двойной цикл внутри вычисления каждого кадра, это, вероятно, сильно замедляет вас. Возможно, и другие вещи тоже.
Предположим, что ваши блоки «уровня 1» не меняются от кадра к кадру. Итак, мы можем вычислить черный список до того, как вы начнете цикл.
Двойная петля — это пример квадратичного времени. — person Community; 13.06.2019
извините, супер новичок в stackoverflow, даже не знаю, как правильно отформатировать вопрос — person Community; 16.06.2019