opengl 重复瓷砖背景pygame

zc0qhyus  于 2023-04-29  发布在  其他
关注(0)|答案(3)|浏览(138)

Pygame中有类似的功能吗?

screen.fill(pygame.image.load('brick.bmp').convert())

我想用图像填充窗口(背景),以产生类似于以下的效果:

我唯一的想法就是把每一块砖都blit到屏幕上,但我认为那会拖慢游戏的速度。有没有人知道如何做到这一点(并提供一些示例代码)?
下面是一个方法的片段,它可以工作,但运行缓慢

While True:
        for y in range(0,600,32):
            for x in range(0,800,32):
                screen.blit( self.img,(x,y))
        ...
        pygame.display.flip()
tpxzln5u

tpxzln5u1#

把每一块砖都扔到屏幕上,但我认为那会拖慢游戏的速度。
没你想的那么多。bliting非常快。即使有某种“填充”命令,它仍然相当于将图像复制到曲面上,直到曲面被覆盖。
如果背景图像是静止的,则可以在程序启动时渲染到屏幕外的表面,而不是通过使用纯色填充来擦除屏幕,而是只对预渲染的背景进行 Flink 。

hgqdbh6s

hgqdbh6s2#

我在Pygame中找不到这个功能。不过,我有一个方法可以提高你的方法的性能。可以先创建曲面。我们称之为bgSurface。然后,使用双循环方法将所有砖块blit到bgSurface。然后在主循环中执行screen.blit(bgSurface, (0, 0))。试试看。

wwtsj6pe

wwtsj6pe3#

我有一个非常简单的函数,适用于可调整大小的窗口:

def tileBackground(screen: pygame.display, image: pygame.Surface) -> None:
    screenWidth, screenHeight = screen.get_size()
    imageWidth, imageHeight = image.get_size()
    
    # Calculate how many tiles we need to draw in x axis and y axis
    tilesX = math.ceil(screenWidth / imageWidth)
    tilesY = math.ceil(screenHeight / imageHeight)
    
    # Loop over both and blit accordingly
    for x in range(tilesX):
        for y in range(tilesY):
            screen.blit(image, (x * imageWidth, y * imageHeight))

相关问题