(在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 *,我会不断收到内存错误。
答案 0 :(得分:0)
我认为我已经解决了我的问题。我将所有来自Physics的变量放在一个列表中(以将位置保存在内存中)。当发现碰撞时,我就跳出了循环。我已经两次长时间运行该程序,没有任何内存错误。