gpt4 book ai didi

python - 执行 pygame 时提高性能?

转载 作者:行者123 更新时间:2023-12-01 08:28:50 25 4
gpt4 key购买 nike

我的 pygame 运行速度太慢了。如果不使用 oop 类,它可以完美运行,但现在使用 oop 时,它的运行速度非常慢。

我也测试过将该单独的类文件放入主文件中,但结果是相同的。

import pygame
from snake import Snake

pygame.init()
surf_width = 800
surf_height = 600
clock = pygame.time.Clock()

dis_surf = pygame.display.set_mode((surf_width, surf_height))
pygame.display.set_caption("snake game")
run = True
def game_loop():
x = 255
y = 255
x_change = 0
y_change = 0
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
dis_surf.fill((255, 255, 255))
game = Snake(dis_surf, x, y, x_change, y_change)
x = game.x
y = game.y

另一个文件: 导入pygame

class Snake():
def __init__(self, dis_surf, x, y, x_change, y_change):
self.dis_surf = dis_surf
self.x = x
self.y = y
self.width = 20
self.height = 20
self.x_change = x_change
self.y_change = y_change
self.vel = 5
self.draw()

def draw(self):
pygame.draw.rect(self.dis_surf, (0, 255, 0), (self.x, self.y, self.width, self.height))
self.run()
pygame.display.update()

def run(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.x_change = self.vel
self.y_change = 0
elif event.key == pygame.K_LEFT:
self.x_change = -self.vel
self.y_change = 0
elif event.key == pygame.K_UP:
self.y_change = -self.vel
self.x_change = 0
elif event.key == pygame.K_DOWN:
self.y_change = self.vel
self.x_change = 0
print(event)
self.x += self.x_change
self.y += self.y_change


x_change = game.x_change
y_change = game.y_change
pygame.display.update()
clock.tick(60)

game_loop()

最佳答案

有些事情是错误的。

1) 当您执行 game = Snake() 时,您正在实例化一个新的 Snake 对每个游戏循环进行类> 在 while 循环内部。这与第二点结合起来就是你的主要问题。我为您将这一行移到了 while 循环之外。

2) 您正在调用 run() 内部 __init__。这是你永远不应该在构造函数中执行的操作,构造函数通常只应用于设置初始数据。这也极大地导致了第一个问题,因为这种情况在每个游戏循环中都会发生。我为您删除了 __init__ 内的 self.run() 调用。

3) pygame.display.update() 被调用两次。不是问题的原因,但仍然没有必要。

为您做了一些小修正。

import pygame

pygame.init()
surf_width = 800
surf_height = 600
clock = pygame.time.Clock()

dis_surf = pygame.display.set_mode((surf_width, surf_height))
pygame.display.set_caption("snake game")
run = True

def game_loop():
x = 255
y = 255
x_change = 0
y_change = 0
game = Snake(dis_surf, x, y, x_change, y_change)
while run:
dis_surf.fill((255, 255, 255))
game.draw()

class Snake():
def __init__(self, dis_surf, x, y, x_change, y_change):
self.dis_surf = dis_surf
self.x = x
self.y = y
self.width = 20
self.height = 20
self.x_change = x_change
self.y_change = y_change
self.vel = 5

def draw(self):
pygame.draw.rect(self.dis_surf, (0, 255, 0), (self.x, self.y, self.width, self.height))
self.run()

def run(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
self.x_change = self.vel
self.y_change = 0
elif event.key == pygame.K_LEFT:
self.x_change = -self.vel
self.y_change = 0
elif event.key == pygame.K_UP:
self.y_change = -self.vel
self.x_change = 0
elif event.key == pygame.K_DOWN:
self.y_change = self.vel
self.x_change = 0
self.x += self.x_change
self.y += self.y_change
pygame.display.update()
clock.tick(60)

game_loop()

关于python - 执行 pygame 时提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54034662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com