微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 在旧文本上渲染文本

如何解决Pygame 在旧文本上渲染文本

我有以下函数可以绘制到 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",255))
    altitude_label = STAT_FONT.render(f"Altitude: {round(rocket.altitude,3)} km",255))
    fuel_label = STAT_FONT.render(f"Fuel: {round(rocket.fuel,2)} kg",255))
    time_label = STAT_FONT.render(f"Time: {round(rocket.time_passed,2)} s",255))
else:
    veLocity_label = STAT_FONT.render(f"VeLocity: {round(rocket.veLocity,(0,0))
    acceleration_label = STAT_FONT.render(f"acceleration: {round(rocket.acceleration,0))
    altitude_label = STAT_FONT.render(f"Altitude: {round(rocket.altitude,0))
    fuel_label = STAT_FONT.render(f"Fuel: {round(rocket.fuel,0))
    time_label = STAT_FONT.render(f"Time: {round(rocket.time_passed,0))
win.blit(veLocity_label,0))
win.blit(acceleration_label,50))
win.blit(altitude_label,100))
win.blit(fuel_label,150))
win.blit(time_label,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.y1))
    else:
        win.blit(self.IMG,self.y2))
        win.blit(self.IMG,self.y1))

然而,当背景开始加速时,文本开始呈现在自身之上。我不确定为什么会发生这种情况。非常感谢任何帮助。

编辑: 基地移动的速度随时间增加

Screen freezes

这是屏幕冻结时的样子。

解决方法

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

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

    def __init__(self,x):
        self.x = x
        self.y = 0

    def move(self,vel):
        self.VEL = vel
        self.y = (self.y - self.VEL) % self.HEIGHT
        
    def draw(self,win,in_space):
    if in_space:
        win.blit(self.space,(self.x,self.y - self.HEIGHT))
        win.blit(self.space,self.y))
    else:
        win.blit(self.IMG,self.y - self.HEIGHT))
        win.blit(self.IMG,self.y))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。