Python 2.7.7 / Pygame — застрял при прокрутке случайных изображений (каналы в flappy bird)

#python #pygame

#python #pygame

Вопрос:

В настоящее время я пытаюсь создать версию flappy bird для pygame (намного сложнее, чем я думал) и застрял на том, чтобы заставить каналы генерироваться на случайной высоте. Кто-нибудь может мне помочь с этим? Чтобы сделать такую же анимацию, я хочу сгенерировать каналы немного дальше правой части экрана и удалить их немного дальше левой. Когда я запускаю текущий код, изображения каналов находятся друг над другом в верхнем левом углу и не перемещаются. (Птица работает, хотя)

 import pygame, random, sys

pygame.init()
icon = pygame.image.load('flappybirdicon.png')
pygame.display.set_icon(icon)
screen = pygame.display.set_mode([284, 512])
pygame.display.set_caption("Flappy Bird")
bg = pygame.image.load('flappybirdbackground.png')
bgrect = bg.get_rect()
clock = pygame.time.Clock()

pipex = 335

class Bird(pygame.sprite.Sprite):
    def __init__(self, image, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image)
        self.rect = self.image.get_rect()
        self.pos = [x, y]

class Pipe(pygame.sprite.Sprite):
    def __init__(self, image, height):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image)
        self.rect = self.image.get_rect()
        self.height = height
        self.pos = [pipex, height]

    def scroll(self):
        self.rect.move_ip(-3, 0)
        self.pos[0] -= 3
        self.rect.center = self.pos

def draw_pipes():
    pipe1_height = random.randint(115, screen.get_height())
    pipe1 = Pipe('flappybirdpipe.png', pipe1_height)
    pipe2_height = 397 - pipe1_height
    pipe2 = Pipe('flappybirdpipe2.png', pipe2_height)
    screen.blit(pipe1.image, pipe1.rect)
    screen.blit(pipe2.image, pipe2.rect)

bird = Bird('flappybirdbird.png', 142, 256)
draw_pipes()

while True:
    clock.tick(30)
    bird.pos[1]  = 5
    bird.rect.center = bird.pos
    screen.blit(bg, bgrect)
    pipe1.scroll()
    pipe2.scroll()
    screen.blit(bird.image, bird.rect)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bird.pos[1] -= 75
        elif event.type == pygame.MOUSEBUTTONDOWN:
            bird.pos[1] -= 75
  

Ответ №1:

Я не знаком с PyGame, но похоже, что вы нигде не устанавливаете координату X для своих каналов. Вы устанавливаете высоту, но никогда местоположение.

Также похоже, что вы нигде не сохраняете данные канала, поэтому я полагаю, что ваш код также вызывает создание / рисование новых каналов при каждом вызове draw_pipes() , который выглядит как каждый кадр.

Комментарии:

1. Да, я совершенно не понимаю, куда с этим идти и что делать, в основном с тем, как отслеживать экземпляры канала.