Pygame不绘图
我在做一个程序,需要一些帮助。这个程序是康威生命游戏的一个版本。现在这个游戏由三个文件组成:main.py、cellBoard.py 和 cell.py。
main.py 负责创建 cellBoard,并让它更新数据、接收鼠标输入,还要告诉它怎么绘制自己(它会得到一个 pygame 的表面实例,这个实例会处理实际绘制的细胞)。
cellBoard.py 根据细胞的大小和屏幕的大小创建一个细胞列表,以便正确填充。这个列表是一个二维列表。当它创建细胞时,会设置它们的状态(当前是活着的),并给它们一个原始表面实例的引用。
cell.py 包含了细胞可以做的所有事情:死亡、存活、切换状态和绘制。
实际上,当我需要绘制整个棋盘时,只需调用 cellBoard 的 draw() 方法,它会负责调用每个细胞的 draw 方法。它确实能做到这一点。执行到应该绘制细胞的地方(我用打印语句检查过),像素填充的函数也会执行(用一个循环来覆盖区域)。但是,屏幕上什么都没有被绘制出来,或者说至少看不见。
我不知道是什么导致了这个问题。我检查了代码很多次,甚至从头开始重写了整个程序,让它更整洁(但我遇到的问题和现在一样)。
是什么导致了这个问题呢?我猜可能是细胞的表面实例出了问题,因为它在到达每个细胞之前要经过 cellBoard,这会是问题吗?
这是源代码(所有三个文件都很短,结构简单,应该容易阅读) http://dl.dropbox.com/u/2951174/src.zip
非常感谢任何愿意提供帮助的人。我需要尽快完成这个项目,所以你的帮助将不胜感激。
1 个回答
首先给个小建议:
如果你不想让别人下载一个压缩文件,下一次就直接把你怀疑有问题的代码部分发出来,这样大家更愿意帮你。
不过,问题似乎出在你的主循环里:
#Keyboard events
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
running = 0
#Mouse events
#todo
#Grid update <------- here you update the grid and the cells are being drawn
cb.draw()
#Graphical output <------------ here you're filling the WHOLE screen with white
screen.fill(THECOLORS["white"])
pygame.display.flip()
你需要把 screen.fill
这行代码放到 cb.draw
之前,这样就不会把格子画覆盖掉。
还有在 cell.py
里,你的绘图代码 A) 有问题,B) 也不好。
与其一个一个像素去设置,这样速度慢,而且现在的状态下也不能正确画出格子,不如直接画个矩形:
pygame.draw.rect(self.surface, (100, 10, 10), (self.pos[0], self.pos[1], self.size, self.size))