2014-02-02 5 views
0

Будучи новичком в Pygame и относительным новичком на Python (около 4 месяцев знания), я подумал, что было бы хорошей практикой попробовать и воссоздать популярное приложение для телефона «Flappy Bird». Я был в порядке с этим, до того момента, когда я сейчас. Как сохранить одну прокрутку прямоугольника, а другой - прокрутку с использованием той же функции? Это возможно? Вероятно, существует метод только для этого, но я изучал модуль менее 7 часов: D Вот мой код до сих пор в Python 3.2. (Без учета импорта)Как создать повторяющиеся, разные прямоугольники в Pygame?

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() 

Благодарим за помощь, которую вы можете дать!

+0

К сожалению, я не знаком с игрой. Не могли бы вы рассказать о прокрутке, которую вы пытаетесь сделать? –

+0

По существу, это зеленый, стиль Марио, труба (прямоугольник в моем случае), который бесконечно свисает с разных высот. Первоначально, подумал я, «ну это просто прокрутка линий. Как трудно это может быть?' Но я думаю, что одновременно с несколькими прямоугольниками на экране, на другой высоте, это то, что создает для меня проблему. Спасибо за ваш ответ! – Harvey

ответ

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() 

Позже вы можете просто удалить трубы, которые не находятся на экране, и добавить новые, когда удаляется труба.

+0

Большое спасибо! Я пытался избежать использования классов, но я думаю, это было неизбежно. Спасибо, в любом случае! – Harvey

+0

@ Харви Нет никакого позора в использовании классов. Вы могли бы просто сохранить сами Rect в списке, но более читаемо иметь отдельные классы с выделенными методами. –

+0

Ну, это действительно хорошо, потому что пример, который вы мне дали, заставил его щелкнуть, и теперь я понимаю классы больше! – Harvey