0

作为 Pygame 的初学者和 Python 的相对初学者(大约 4 个月的知识),我认为尝试重新创建流行的手机应用程序“Flappy Bird”是一种很好的做法。到目前为止,我一直很好地做到这一点。如何保持一个矩形滚动,同时绘制另一个将使用相同功能滚动的矩形?这可能吗?可能有一种方法可以解决这个问题,但我学习该模块的时间还不到 7 个小时 :D 这是我目前在 Python 3.2 中的代码。(不包括进口)

def drawPipe():
    randh = random.randint(40,270)
    scrollx -=0.2
    pygame.draw.rect(screen, (0,150,30), Rect((scrollx,0),(30,340)))


bif = "BG.jpg"
mif = "bird.png"

pygame.init()
screen = pygame.display.set_mode((640,900),0,32)

background = pygame.image.load(bif).convert()
bird = pygame.image.load(mif).convert_alpha()

pygame.display.set_caption("Flappy Bird")
pygame.display.set_icon(bird)

x,y = 320,0
movex, movey = 0,0

scrollx = 640

while True:
    for event in pygame.event.get():
        movey = +0.8
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key == K_SPACE:
                movey = -2


    x += movex
    y += movey


    screen.blit(background,(0,0))
    screen.blit(bird,(x,y))

    drawPipe()


    pygame.display.update()

感谢您提供的任何帮助!

4

1 回答 1

1

您应该首先创建您想要在游戏中拥有的对象,其中一个操作是绘制它们。

因此,您不想拥有绘制管道和滚动的函数,而是希望拥有以下内容:

class Pipe:

def __init__(self,x,height):
    self.rect = Rect((x,0),(30,height))

def update():
    self.rect.move_ip(-2,0)

def draw(screen):
    pygame.draw.rect(screen,color,self.rect)

然后在游戏后期你可以拥有:

pipes = [Pipe(x*20,random.randint(40,270)) for x in range(5)]

for pipe in pipes:
    pipe.draw(screen)
    pipe.update()

稍后您可以删除不在屏幕上的管道,并在删除管道时附加新的管道。

于 2014-02-03T21:35:30.323 回答