2017-04-16 42 views
0

随着背景沿着侧面滚动,图像的末端延伸,并且图像的其余部分不会出现,只是同一个小山延长。然后突然重置。此外,图像的一部分(矩形)会从图像的其余部分移开,使其不均匀并保持不变,直到它从视图中消失。连续的横向滚动会在背景图像显示中产生异常

Normal background

Elongated background

Displaced backgound

下面是我用侧涡代码

import pygame, sys, time, random 
from pygame.locals import * 

class Background(pygame.sprite.Sprite): #Creates space background 
    def __init__(self, image_file, location): 
     pygame.sprite.Sprite.__init__(self) #call Sprite initializer 
     self.bgimage = pygame.image.load(image_file) 
     self.bgimage = pygame.transform.scale(self.bgimage, (1333, 600)) 
     self.rectBGimg = self.bgimage.get_rect() 

     self.bgY1 = 0 
     self.bgX1 = 0 

     self.bgY2 = 0 
     self.bgX2 = self.rectBGimg.width 

     self.movingUpSpeed = 5 

    def update(self): 
     self.bgX1 -= self.movingUpSpeed 
     self.bgX2 -= self.movingUpSpeed 
     if self.bgX1 <= -self.rectBGimg.height: 
      self.bgX1 = self.rectBGimg.height 
     if self.bgX2 <= -self.rectBGimg.height: 
      self.bgY2 = self.rectBGimg.height 

    def render(self): 
     screen.blit(self.bgimage, (self.bgX1, self.bgY1)) 
     screen.blit(self.bgimage, (self.bgX2, self.bgY2)) 


pygame.init() 

FPS = 15 # frames per second setting 
clock = pygame.time.Clock() 

window_width = 1333 
window_height = 600 

# set up the window 
screen = pygame.display.set_mode((window_width, window_height)) 
pygame.display.set_caption('Deterred Journey') 

BackGround = Background('scrollingBackground.png', [0,0]) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 


    #Adds images and text 
    BackGround.render() 
    BackGround.update() 
    pygame.display.flip() 
    pygame.display.update() 
    clock.tick(30) 

pygame.quit() 
sys.exit() 

回答

0

看起来像我的更新功能是检查bgX1和bgX2对高度产生位移和我设置了self.bgY2 = self.rectBGimg.height导致伸长。由于它的垂直滚动bgX2必须设置宽度

更新的功能应该像

def update(self): 
    self.bgX1 -= self.movingUpSpeed 
    self.bgX2 -= self.movingUpSpeed 
    if self.bgX1 <= -self.rectBGimg.width: 
     self.bgX1 = self.rectBGimg.width 
    if self.bgX2 <= -self.rectBGimg.width: 
     self.bgX2 = self.rectBGimg.width