我如何改善我的代码(列表)以避免内存错误

时间:2019-08-14 12:37:48

标签: python-3.x pygame out-of-memory

(在python中)我正在做一个游戏,盒子从天而降。我希望将这些盒子堆叠起来,以便创建一个列表,列出所有不包含盒子的表面(目前仅是顶部表面)。但是由于某种原因,它有时会给我带来内存错误,但有时却不会。

在我使用的iter() for循环中,我认为它可以节省内存。尽管我认为它有所改善,但仍然遇到内存问题。

我想将曲面列表保持在50个以下,但是游戏并未按预期运行。

“我在这里传递盒子,盒子是具有x,y,宽度,高度,move_x,move_y,掉落的类”

for box in iter(self.boxes):
    box.x, box.y, box.falling = Physics(box.x, box.y, box.width, 
    box.height, box.move_x, box.move_y, self.display_width, 
    self.display_height, box.falling, player=False).move()
    pygame.draw.rect(self.win, (255, 255, 255), (box.x, box.y, box.width, box.height))

pygame.display.update()

一个表面(x,y,宽度,高度)的示例

这将导入到主文件

def collision(self):
    for surface in iter(self.surfaces):
        if surface[0] - self.width < self.x < surface[0] + surface[2]:
            if surface[1] - self.height <= self.y < surface[1] + surface[3] - self.height*:

                self.y = surface[1] - self.height
                self.falling = False
                if not self.player:
                    Physics.surfaces.append((self.x, self.y, self.width, self.height))

一些额外的信息:当没有给出错误时,它将使用我处理器的4-5%,而在错误时将使用10-16%

编辑:如果我在第二个代码块(第二个if语句)中删除了self.height *,我会不断收到内存错误。

1 个答案:

答案 0 :(得分:0)

我认为我已经解决了我的问题。我将所有来自Physics的变量放在一个列表中(以将位置保存在内存中)。当发现碰撞时,我就跳出了循环。我已经两次长时间运行该程序,没有任何内存错误。