我下面有两个程序试图在黄色屏幕上画一个球。一种是将我的表面对象填充在while循环之外,另一种是将其填充到while循环内部。
在while循环之外有$create = $bdd->query('ALTER TABLE reservation ADD test INT NULL');
时,当我尝试移动它时,我的图像会重新绘制。因此,当图像下降时,它将在屏幕下方10像素处绘制一个重复图像。
当我在while循环中有ALTER TABLE reservation ADD COLUMN test INT NULL
时,我的单个图像将更新并重新绘制到新位置。
这是为什么?
非跟踪代码:
.fill()
跟踪图像代码:
.fill()
答案 0 :(得分:1)
链接的代码(图像)不会产生您描述的效果。在左侧,根本没有对screen
进行任何更新。在右侧,唯一的更新是黄色的screen.fill()
。
所以假设来说...
可以将PyGame程序看作是动画的一种。在主循环中,通常有一个块用于处理用户输入,调用更新屏幕上对象的位置以及调用更新,即“重新绘制”屏幕。
此动画的每个“帧”都具有背景,通常还带有一些重叠的对象。这些内容可能是玩家位图,战斗位图,运动场项目,文本得分和状态等。通常先绘制背景,然后绘制覆盖的项目。绘制完屏幕后,将为下一次显示计算对象的运动,然后重新绘制,一次又一次...
问题描述的第一种情况是,屏幕以某种方式更新,使得动画的先前“帧”尚未清除,并且用户看到了先前显示和当前显示的组合。 >
第二种情况将首先用screen.fill()
擦除整个显示。这样就消除了前一帧的任何痕迹。这是典型的处理方法。
还有另一种方法。此方法跟踪更改屏幕的位置,并且仅重新绘制需要更新的特定区域。这种方法可以潜在地提供更有效的输入-更新-绘制周期,因为它不会重新绘制未更改的项目。