【问题标题】:Continous sidescrolling creates abnormality in display of background image连续横向滚动会导致背景图像显示异常
【发布时间】:2017-09-12 12:10:00
【问题描述】:

随着背景沿侧面滚动,图像的末端会被拉长,而图像的其余部分不会像拉长的山一样出现。然后它突然重置。此外,图像的一部分(一个矩形)与图像的其余部分发生了位移,使其不均匀并保持不变,直到它从视图中消失。

这是我用来横向滚动的代码

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

【问题讨论】:

    标签: pygame python-3.5


    【解决方案1】:

    看起来我的更新函数正在检查 bgX1 和 bgX2 的高度是否导致位移,我设置了self.bgY2 = self.rectBGimg.heightcausing elongation。由于它是垂直滚动 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
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2012-09-08
      • 2016-06-11
      • 2011-12-03
      • 2018-02-11
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多