2013-04-13 1 views
0

Я пытаюсь сделать мой фоновый список изображений, чтобы изменить себя, как только они попали в нижней части моего экрана ....Вертикальная прокрутка фона в Pygame

У меня есть объект Camera, который обновляет свой self.state к положение моего движущегося шара.

Вот мой фон Класс:

class Background(pygame.sprite.Sprite): 
def __init__(self, x, y): 
    pygame.sprite.Sprite.__init__(self) 
    self.image = pygame.image.load('images/clouds.jpg').convert() 
    self.x = x 
    self.y = y 
    self.rect = self.image.get_rect() 
    self.rect.left, self.rect.top = self.x, self.y 

def update(self,cam): 
    self.rect.left = self.x + (0.2*cam.state.left) 
    self.rect.top = self.y + (0.2*cam.state.top) 

0.2 *, чтобы сделать его двигаться медленнее, чем мой фактический сдвиг камеры.

Вот как я строить Б.Г. изображений перед моим большим основным циклом:

all_backgrounds = pygame.sprite.Group() 
#building bg images 
for i in xrange((WIDTH+BG_WIDTH)/BG_WIDTH): 
    for j in xrange((HEIGHT+BG_HEIGHT)/BG_HEIGHT): 
     all_backgrounds.add(Background(BG_WIDTH*i,BG_HEIGHT*j)) 

Тогда в моем главном цикле:

...... 
all_backgrounds.update(cam) 
...... 
all_backgrounds.draw(screen) 

Я ищу хорошие предложения о том, как заставить его работать гладко , Я попытался использовать инструкции if в моем Background.update(), но это делает его лаги и проблемы с tear & перекрывают линии из-за Int, float-конверсий.

ответ

1

Вы можете попробовать: PyParallax похоже, что он делает то, что вы хотите, и больше.

+0

Эта библиотека была для горизонтальной прокрутки, но я ее модифицировал и использовал, она работает как шарм! – Amzraptor

+0

d'oh right, вертикальная прокрутка, он просто думал о слоях (у вас есть 1 bg изображение + спрайты переднего плана), они используют 3 bg изображения в своем примере, но я уверен, что замена x для y была довольно простой. –