surface.fill()在while循环中更新rect吗?

时间:2019-03-15 02:40:54

标签: pygame blit

我下面有两个程序试图在黄色屏幕上画一个球。一种是将我的表面对象填充在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()

enter image description here

1 个答案:

答案 0 :(得分:1)

链接的代码(图像)不会产生您描述的效果。在左侧,根本没有对screen进行任何更新。在右侧,唯一的更新是黄色的screen.fill()

所以假设来说...

可以将PyGame程序看作是动画的一种。在主循环中,通常有一个块用于处理用户输入,调用更新屏幕上对象的位置以及调用更新,即“重新绘制”屏幕。

此动画的每个“帧”都具有背景,通常还带有一些重叠的对象。这些内容可能是玩家位图,战斗位图,运动场项目,文本得分和状态等。通常先绘制背景,然后绘制覆盖的项目。绘制完屏幕后,将为下一次显示计算对象的运动,然后重新绘制,一次又一次...

问题描述的第一种情况是,屏幕以​​某种方式更新,使得动画的先前“帧”尚未清除,并且用户看到了先前显示和当前显示的组合。 >

第二种情况将首先用screen.fill()擦除整个显示。这样就消除了前一帧的任何痕迹。这是典型的处理方法。

还有另一种方法。此方法跟踪更改屏幕的位置,并且仅重新绘制需要更新的特定区域。这种方法可以潜在地提供更有效的输入-更新-绘制周期,因为它不会重新绘制未更改的项目。