我正在用keys
编写一个游戏,其中包括两个由玩家控制的坦克,这些坦克用自己的健康棒围绕砖图并用一种子弹射击。从我所知道的,其他一切都在起作用,但我无法确定在哪个表面上绘制砖块,坦克和子弹:“背景”或“屏幕”(砖块在游戏过程中不会改变,只有坦克和子弹)。我尝试在背景上绘制除了健康条之外的所有内容,但这只会导致黑屏只显示健康条。然后我把所有东西直接画在屏幕上,一开始就正确地显示了一切,但是当坦克四处移动时,屏幕不会刷新(当坦克移动时,我得到许多坦克图像相互重叠)并且子弹不会射击结果是正确的。代码在下面,但pygame
方法位于最底层,这就是导致错误的原因。在最顶层导入的“effects.py”文件只包含项目符号和“繁荣”和“炸弹”类,它们只是特殊效果但到目前为止还没有在main()方法中使用,所以可以忽略它们。
main()
答案 0 :(得分:0)
我的建议是创建一个全局screen
变量(而不是包含在一个函数中,并生成一个单独的城市图像,并添加砖块。因为这些都是不变的组件,每次刷新帧时都可以在屏幕上显示。
之后,在每个框架上,坦克(带有健康栏和其他东西)和子弹可以直接插入screen
变量。
在完成所有blitting之后只做pygame.display.flip()
可能是最简单的,但是保持一个pygame.Rects
数组代表blit位置,然后保持旧blit { {1}}然后做类似的事情:
Rects
通过这种方式,可以使用old_rects = current_rects
current_rects = []
#make blits, collect Rects in current_rects
pygame.display.update(current_rects + old_rects)
(因为效率更高),并且在没有刷新的情况下不会出现问题。
我希望这有效,你可以实现类似的东西。