Python Pygame在旧文本上渲染文本

Python Pygame在旧文本上渲染文本,python,python-3.x,pygame,pygame-surface,Python,Python 3.x,Pygame,Pygame Surface,我使用以下函数绘制pygame窗口: base.draw(win, rocket.in_space) win.blit(rocket_img, (120, 150)) if rocket.in_space: velocity_label = STAT_FONT.render(f"Velocity: {round(rocket.velocity, 3)} km/s", True, (255, 255, 255)) acceleration_label =

我使用以下函数绘制pygame窗口:

    base.draw(win, rocket.in_space)
win.blit(rocket_img, (120, 150))
if rocket.in_space:
    velocity_label = STAT_FONT.render(f"Velocity: {round(rocket.velocity, 3)} km/s", True, (255, 255, 255))
    acceleration_label = STAT_FONT.render(f"Acceleration: {round(rocket.acceleration, 3)} km/s^2", True, (255, 255, 255))
    altitude_label = STAT_FONT.render(f"Altitude: {round(rocket.altitude, 3)} km", True, (255, 255, 255))
    fuel_label = STAT_FONT.render(f"Fuel: {round(rocket.fuel, 2)} kg", True, (255, 255, 255))
    time_label = STAT_FONT.render(f"Time: {round(rocket.time_passed, 2)} s", True, (255, 255, 255))
else:
    velocity_label = STAT_FONT.render(f"Velocity: {round(rocket.velocity, 3)} km/s", True, (0, 0, 0))
    acceleration_label = STAT_FONT.render(f"Acceleration: {round(rocket.acceleration, 3)} km/s^2", True, (0, 0, 0))
    altitude_label = STAT_FONT.render(f"Altitude: {round(rocket.altitude, 3)} km", True, (0, 0, 0))
    fuel_label = STAT_FONT.render(f"Fuel: {round(rocket.fuel, 2)} kg", True, (0, 0, 0))
    time_label = STAT_FONT.render(f"Time: {round(rocket.time_passed, 2)} s", True, (0, 0, 0))
win.blit(velocity_label, (0, 0))
win.blit(acceleration_label, (0, 50))
win.blit(altitude_label, (0, 100))
win.blit(fuel_label, (0, 150))
win.blit(time_label, (0, 200))
pygame.display.update()
下面是使背景移动的代码:

class Base:
VEL = 5
HEIGHT = bg_img.get_height()
IMG = bg_img
space = space_img

def __init__(self, x):
    self.x = x
    self.y1 = 0
    self.y2 = self.HEIGHT

def move(self, vel):
    self.VEL = vel
    self.y1 -= self.VEL
    self.y2 -= self.VEL
    if self.y1 + self.HEIGHT < 0:
        self.y1 = self.y2 + self.HEIGHT

    if self.y2 + self.HEIGHT < 0:
        self.y2 = self.y1 + self.HEIGHT

def draw(self, win, in_space):
    if in_space:
        win.blit(self.space, (self.x, self.y2))
        win.blit(self.space, (self.x, self.y1))
    else:
        win.blit(self.IMG, (self.x, self.y2))
        win.blit(self.IMG, (self.x, self.y1))
类库:
水平=5
高度=bg_img.get_HEIGHT()
IMG=bg\u IMG
空间=空间
定义初始化(self,x):
self.x=x
self.y1=0
self.y2=self.HEIGHT
def移动(自身、水平):
self.VEL=VEL
self.y1-=self.VEL
self.y2-=self.VEL
如果self.y1+self.HEIGHT<0:
self.y1=self.y2+self.HEIGHT
如果self.y2+self.HEIGHT<0:
self.y2=self.y1+self.HEIGHT
def抽签(自我、胜利、在_空间):
如果在空间中:
win.blit(self.space,(self.x,self.y2))
win.blit(self.space,(self.x,self.y1))
其他:
win.blit(self.IMG,(self.x,self.y2))
win.blit(self.IMG,(self.x,self.y1))
但是,当背景开始加速时,文本开始在自身上渲染。我不知道为什么会这样。非常感谢您的帮助

编辑: 底座移动的速度随着时间的推移而增加


这就是屏幕冻结时的样子。

问题是背景y坐标的计算。如果
self.VEL
大于
HEIGHT
,该算法将崩溃。使用模(
%
)运算符计算y坐标:

类库:
水平=5
高度=bg_img.get_HEIGHT()
IMG=bg\u IMG
空间=空间
定义初始化(self,x):
self.x=x
self.y=0
def移动(自身、水平):
self.VEL=VEL
self.y=(self.y-self.VEL)%self.HEIGHT
def抽签(自我、胜利、在_空间):
如果在空间中:
win.blit(self.space,(self.x,self.y-self.HEIGHT))
win.blit(self.space,(self.x,self.y))
其他:
win.blit(self.IMG,(self.x,self.y-self.HEIGHT))
win.blit(self.IMG,(self.x,self.y))

请提供一个很长很复杂的程序,但相关的部分是这些,而且速度会随着时间的推移而增加。没有更多相关的代码,但我添加了一个屏幕截图,它看起来像什么。我认为通过绘制它解决了这个问题?有没有特定的线条可以做到这一点?我没有设置背景,所以我假设是这样,但我更希望背景图像是可见的。