Python 2.7无限滚动背景?

Python 2.7无限滚动背景?,python,python-2.7,pygame,pycharm,Python,Python 2.7,Pygame,Pycharm,我正在尝试制作一个非常简单的游戏,你可以上下移动来躲避投射物,但我处于静止状态,我似乎不知道如何添加滚动背景 我想要的只是一个循环滚动的背景,直到游戏结束才会停止,给人一种运动/飞行的错觉。有什么帮助吗 import pygame pygame.init() screen = pygame.display.set_mode((720, 229)) clock = pygame.time.Clock() bck = pygame.image.load('background.png')

我正在尝试制作一个非常简单的游戏,你可以上下移动来躲避投射物,但我处于静止状态,我似乎不知道如何添加滚动背景

我想要的只是一个循环滚动的背景,直到游戏结束才会停止,给人一种运动/飞行的错觉。有什么帮助吗

import pygame
pygame.init()


screen = pygame.display.set_mode((720, 229))


clock = pygame.time.Clock()


bck = pygame.image.load('background.png')


class Box(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("goku.png")
        self.rect = self.image.get_rect()

        self.rect.centerx = 50
        self.rect.centery = 50
        self.dx = 5
        self.dy = 5

    def update(self):
        self.move()
        self.wrap()

    def move(self):
        k = pygame.key.get_pressed()
        if k[pygame.K_a]:
            self.rect.centerx -= self.dx
        if k[pygame.K_d]:
            self.rect.centerx += self.dx
        if k[pygame.K_w]:
            self.rect.centery -= self.dy
        if k[pygame.K_s]:
            self.rect.centery += self.dy

    def wrap(self):
        if self.rect.left > screen.get_width():
            self.rect.right = 0
        if self.rect.right < 0:
            self.rect.left = screen.get_width()
        if self.rect.top > screen.get_height():
            self.rect.bottom = 0
        if self.rect.bottom < 0:
            self.rect.top = screen.get_height()


def main():
    loop = True
    clock = pygame.time.Clock()

    box = Box()
    allSprites = pygame.sprite.Group(box)

    while loop:
        clock.tick(30)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                loop = False

        screen.blit(bck, (0, 0))
        allSprites.update()
        allSprites.draw(screen)
        pygame.display.flip()

if __name__ == '__main__':
    main()
导入pygame
pygame.init()
screen=pygame.display.set_模式((720229))
clock=pygame.time.clock()
bck=pygame.image.load('background.png')
类框(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.image.load(“goku.png”)
self.rect=self.image.get_rect()
self.rect.centerx=50
self.rect.centery=50
self.dx=5
self.dy=5
def更新(自我):
self.move()
self.wrap()
def移动(自我):
k=pygame.key.get_pressed()
如果k[pygame.k_a]:
self.rect.centerx-=self.dx
如果k[pygame.k_d]:
self.rect.centerx+=self.dx
如果k[pygame.k_w]:
self.rect.centery-=self.dy
如果k[pygame.k_s]:
self.rect.centery+=self.dy
def包裹(自):
如果self.rect.left>screen.get_width():
self.rect.right=0
如果self.rect.right<0:
self.rect.left=screen.get_width()
如果self.rect.top>screen.get_height():
self.rect.bottom=0
如果self.rect.bottom<0:
self.rect.top=screen.get_height()
def main():
循环=真
clock=pygame.time.clock()
box=box()
allSprites=pygame.sprite.Group(框)
while循环:
时钟滴答(30)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
循环=错误
屏幕光点(bck,(0,0))
allSprites.update()
所有精灵。绘制(屏幕)
pygame.display.flip()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

在您的代码中,您将显示在背景中,如下所示:
screen.blit(bck,(0,0)
使背景精灵始终处于(0,0)

您应该跟踪播放器的移动,并将其用作背景精灵
screen.blit(bck,(player.position\u x,0)
player.position\u x
或任何变量名称的偏移量。在当前上下文中,它可能是
box.rect.centerx
,使其与播放器一起移动

为了获得更好的效果,您需要调整
screen.blit(bck,(player.position\u x/2,0)
以获得移动较慢的背景


此外,在这样做之后,您可能应该让背景沿着移动轴重新复制自己。

我想我应该将我的背景本身制作成一个精灵类,然后让背景继续向左移动

class back(pygame.sprite.Sprite):
def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load("background.png")
    self.rect = self.image.get_rect()

def update(self):
    self.rect.centerx -= 5

我应该注意的是,我刚刚开始,刚刚创建了玩家精灵。我在滚动背景问题上陷入了困境,此后一直无法取得进展。也许这个问题会有所帮助:干杯,我一定会研究这个问题。谢谢你的解释。