Pygame лагает после рисования полнооконной сетки - PullRequest
1 голос
/ 07 мая 2020

Мне было написано простое окно сетки pygame. но после этого начинается запаздывание окна pygame.

Вот этот простой код

import pygame
import random

pygame.init()
pygame.font.init()

screen_width = 500
screen_height = screen_width

screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("Snake GaMe By Akila")

def drawGrid():
    grid_list = []
    blockSize = 25
    for x in range(screen_width):
        for y in range(screen_height):
            rect = pygame.Rect(x*blockSize, y*blockSize, blockSize, blockSize)
            pygame.draw.rect(screen, (255,255,255), rect, 1)

running = True
while running:
    screen.fill((0,0,0))
    drawGrid()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.update()

Я пытался изменить фрагмент вызова drawGrid() позиции функции.

1 Ответ

2 голосов
/ 07 мая 2020

Для повышения производительности не создавайте шлифовку в каждом кадре.

Создайте pygame.Surface с размером окна и нарисуйте сетку на этой поверхности:

grid_surf = pygame.Surface((screen_width,screen_height))
drawGrid(grid_surf)

Эта поверхность является фоном для вашей сцены. blit в начале каждого кадра:

screen.blit(grid_surf, (0, 0))

Пример кода:

import pygame
import random

pygame.init()
pygame.font.init()

screen_width = 500
screen_height = screen_width

screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("Snake GaMe By Akila")

def drawGrid(surf):
    grid_list = []
    blockSize = 25
    for x in range(screen_width):
        for y in range(screen_height):
            rect = pygame.Rect(x*blockSize, y*blockSize, blockSize, blockSize)
            pygame.draw.rect(surf, (255,255,255), rect, 1)

grid_surf = pygame.Surface((screen_width,screen_height))
drawGrid(grid_surf)

running = True
while running:
    screen.blit(grid_surf, (0, 0))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    pygame.display.update()
...