如何在Python的pygame中实现背景图像无限滚动

0 投票
1 回答
34 浏览
提问于 2025-04-14 16:44

我试着把每张图片一个接一个地滚动显示,但它总是在图片后面显示一个灰色的背景。

这是我代码的一个草稿:

import math 
import pygame as py 
  
py.init() 
  
clock = py.time.Clock() 
  
FrameHeight = 600
FrameWidth = 1200
  
# PYGAME FRAME WINDOW 
py.display.set_caption("Endless Scrolling in pygame") 
screen = py.display.set_mode((FrameWidth, 
                              FrameHeight)) 
  
# IMAGE 
bg = py.image.load("./Data/sky_background/bg2.png").convert()
# bg.set_colorkey((108,108,108))
# bg = py.transform.scale(bg, [FrameWidth, FrameHeight])
  
# DEFINING MAIN VARIABLES IN SCROLLING 
scroll = 0
  
# CHANGE THE BELOW 1 TO UPPER NUMBER IF 
# YOU GET BUFFERING OF THE IMAGE 
# HERE 1 IS THE CONSTATNT FOR REMOVING BUFFERING 
tiles = math.ceil(FrameWidth / bg.get_width()) + 1
  
# MAIN LOOP 
while 1: 
    # THIS WILL MANAGE THE SPEED OF 
    # THE SCROLLING IN PYGAME 
    clock.tick(33) 
  
    # APPENDING THE IMAGE TO THE BACK 
    # OF THE SAME IMAGE 
    i = 0
    while(i < tiles): 
        screen.blit(bg, (bg.get_width()*i+scroll, 0)) 
        i += 1
    # FRAME FOR SCROLLING 
    scroll -= 20
  
    # RESET THE SCROLL FRAME 
    if abs(scroll) > bg.get_width(): 
        scroll = 0
    # CLOSINF THE FRAME OF SCROLLING 
    for event in py.event.get(): 
        if event.type == py.QUIT: 
            quit() 
  
    py.display.flip() 
  
py.quit() 

这段代码运行得很好(至少我测试过是这样),但我唯一的问题就是每张图片后面都有那个灰色的背景。

1 个回答

0

很遗憾,如果没有实际的图片文件,我们无法确定这些灰色方块出现的原因。不过,很可能是你的图片文件里有灰色的背景。在这种情况下,你可以去一个在线网站,比如 www.remove.bg,把背景去掉(这样在加载图片时,你需要用 convert_alpha() 而不是 convert())。另外,你也可以把图片的颜色键设置成灰色背景的颜色。不过,使用这种方法时要小心,因为它会把所有这种颜色的像素都去掉,包括那些其实是图片一部分而不是背景的像素!

如果你有任何问题,请告诉我,希望这些信息能帮到你!

撰写回答