Так что мое окно pygame просто не перестанет мерцать. Я знаю, что если в snake.snakearray
только один элемент, он не будет мерцать.
#class for the array
class snake:
snakearray = [[ScreenConfigs.width / 2,ScreenConfigs.height / 2],[ScreenConfigs.width / 2,ScreenConfigs.height / 2]]
direction = "up"
increment = 0.1
#loop to draw the snake
while Running:
for snakeBit in snake.snakearray:
pygame.draw.rect(display,"black",(0,0,ScreenConfigs.width,ScreenConfigs.height))
pygame.draw.rect(display,"white",(snakeBit[0],snakeBit[1],30,30))
pygame.display.flip()
Я попытался поместить pygame.display.flip()
за пределы цикла, и он нарисовал только этот последний прямоугольник. (потому что когда вы вызываете pygame.draw.rect
, он игнорирует последний розыгрыш)
@Matiiss Я уже сделал это, и это не сработало
Многократные вызовы pygame.display.update() или pygame.display.flip() вызывают мерцание. Достаточно обновить отображение один раз в конце цикла приложения. Но вам также нужно очистить дисплей только один раз перед отрисовкой сцены:
while Running:
# [...]
# clear display
pygame.draw.rect(display,"black", (0,0,ScreenConfigs.width,ScreenConfigs.height))
# draw scene
for snakeBit in snake.snakearray:
pygame.draw.rect(display,"white",(snakeBit[0],snakeBit[1],30,30))
# update display
pygame.display.flip()
Очистку дисплея также можно выполнить с помощью fill:
while Running:
# [...]
# clear display
display.fill("black")
# draw scene
for snakeBit in snake.snakearray:
pygame.draw.rect(display,"white",(snakeBit[0],snakeBit[1],30,30))
# update display
pygame.display.flip()
Каждый объект в сцене обращается к объекту pygame.Surface
, связанному с дисплеем. Для создания анимированных объектов вся сцена должна перерисовываться в каждом кадре. Следовательно, дисплей должен очищаться в начале каждого кадра в цикле приложения. Если вы рисуете на поверхности, связанной с дисплеем PyGame, это не сразу видно на дисплее. Изменения становятся видимыми, когда дисплей обновляется с помощью pygame.display.update() или pygame.display.flip().
переместите
pygame.display.flip()
за пределы этогоfor
цикла