Python “如何修复”;pygame中的背景故障“;连续滑动背景?

Python “如何修复”;pygame中的背景故障“;连续滑动背景?,python,pygame,Python,Pygame,我为我的pygame添加了连续滚动的背景,以显示玩家总是向前运行的效果。它正在工作,但问题是它不是很顺利,每一秒都有小故障。我需要做什么来解决这个问题 主游戏循环 在主while循环中,每个帧的背景对象更新位置为左侧的5个像素,每个帧中都会出现x-5 def game_window(): global warningCount, warningText player_one.isDead = False gameOver = 20 run = True w

我为我的pygame添加了连续滚动的背景,以显示玩家总是向前运行的效果。它正在工作,但问题是它不是很顺利,每一秒都有小故障。我需要做什么来解决这个问题

主游戏循环 在主while循环中,每个帧的背景对象更新位置为左侧的5个像素,每个帧中都会出现x-5

def game_window():
    global warningCount, warningText
    player_one.isDead = False
    gameOver = 20
    run = True
    while run:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == USEREVENT + 2:
                r = random.randrange(0, 2)
                if r == 0:
                    enemy_list.append(Enemy(800, 318, 64, 64, GAMESPEED))
                else:
                    spike_list.append(Spike(800, 0, 48, 330))
            player_one.eventHandler(event)
        for enemy in enemy_list:
            enemy.update()
            if enemy.x < 0:
                enemy_list.pop(enemy_list.index(enemy))
            if enemy.falling:
                gameOver -= 1
                if gameOver <= 0:
                    warning[0] = 20
                    warning[1] = 'GAME OVER'
                    main_window()
        for spike in spike_list:
            spike.update()
            if spike.x < 0:
                spike_list.pop(spike_list.index(spike))
            if spike.falling:
                gameOver -= 1
                if gameOver <= 0:
                    warning[0] = 20
                    warning[1] = 'GAME OVER'
                    main_window()
        player_one.update()
        bg_one.bgUpade()
        bg_two.bgUpade()
        redrawGameWindow()
背景类
类背景(对象):
定义初始(self,x,y,vel,index):
self.x=x
self.y=y
self.index=索引
self.vel=vel
def抽签(自我,赢):
win.blit(bg[self.index],(self.x,self.y))
如果self.x<-800:
self.x=800
def bgUpade(自我):
如果不是player_one.ishead:
bg_one.x-=bg_one.vel
bg_two.x-=bg_two.vel

为您的问题创建最少的工作代码,以便我们可以运行它并查看问题。问题可能是(1)
如果self.x<-800:self.x=800
,可能您必须多多少少移动几个像素。(2) 一些循环需要更多的计算,它显示前一帧的时间更长-
时钟。滴答声(FPS)
应该以FPS的速度显示,但并不总是可能的。(3) 某些计算给出浮点值,并将它们四舍五入为整数
x,y
,因此移动并不理想。请针对您的问题创建最小的工作代码,以便我们可以运行它并查看问题。问题可能是(1)
如果self.x<-800:self.x=800
,可能您必须多多少少移动几个像素。(2) 一些循环需要更多的计算,它显示前一帧的时间更长-
时钟。滴答声(FPS)
应该以FPS的速度显示,但并不总是可能的。(3) 一些计算给出浮点值,并将它们四舍五入为整数
x,y
,因此移动不理想。
def redrawGameWindow():
    global warningCount, warningText
    bg_one.draw(win)
    bg_two.draw(win)
    player_one.draw(win)
    for enemy in enemy_list:
        enemy.draw(win)
    for spike in spike_list:
        spike.draw(win)
    if warning[0] > 0:
        text_surface = bitter.render(warning[1], 1, COLOR_RED)
        win.blit(text_surface, (int(W / 2 - text_surface.get_width() / 2), 20))
        warning[0] -= 1
    pygame.display.update()
class background(object):
    def __init__(self, x, y, vel, index):
        self.x = x
        self.y = y
        self.index = index
        self.vel = vel

    def draw(self, win):
        win.blit(bg[self.index], (self.x, self.y))
        if self.x < -800:
            self.x = 800

    def bgUpade(self):
        if not player_one.isDead:
            bg_one.x -= bg_one.vel
            bg_two.x -= bg_two.vel