我正在 pygame 中制作贪吃蛇游戏,我注意到了一件奇怪的事情。
每当我显示网格时,我的角色都会缓慢运行。
这是我的程序的主要功能。
我刚刚开始学习pygame!
def main():
global SCREEN, CLOCK
pygame.init()
CLOCK = pygame.time.Clock()
SCREEN.fill(BLACK)
x = 0
y = 0
velocity = 20
x_change = 0
y_change = 0
while True:
drawGrid()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
y_change = -velocity
x_change = 0
if event.key == pygame.K_DOWN:
y_change = velocity
x_change = 0
if event.key == pygame.K_LEFT:
x_change = -velocity
y_change = 0
if event.key == pygame.K_RIGHT:
x_change = velocity
y_change = 0
x += x_change
y += y_change
snake(x, y)
pygame.display.update()
SCREEN.fill(BLACK)
CLOCK.tick(60)
def snake(x, y):
head_rect = pygame.Rect(x, y, BLOCKSIZE, BLOCKSIZE)
pygame.draw.rect(SCREEN, GREEN, head_rect)
def drawGrid():
for x in range(WINDOW_WIDTH):
for y in range(WINDOW_HEIGHT):
rect = pygame.Rect(x*BLOCKSIZE, y*BLOCKSIZE,
BLOCKSIZE, BLOCKSIZE)
pygame.draw.rect(SCREEN, WHITE, rect, 1)
Here are images for sample
我认为重新绘制没有任何问题。重新绘制的项目数量较少。
但是,我可以看到在绘制函数中,您正在为行和列中的每个像素绘制线条。如果在每一帧中都执行此操作,则成本非常高,并且会不必要地浪费 CPU 功率,因为并非所有线条都位于视口中。尝试执行以下操作(将 WINDOW_WIDTH 除以 BLOCKSIZE)range
功能)。这样,您将只在视口中绘制线条。
def drawGrid():
for x in range(WINDOW_WIDTH // BLOCKSIZE):
for y in range(WINDOW_HEIGHT // BLOCKSIZE):
rect = pygame.Rect(x*BLOCKSIZE, y*BLOCKSIZE,
BLOCKSIZE, BLOCKSIZE)
pygame.draw.rect(SCREEN, WHITE, rect, 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)