在 pygame 中渲染图像,在另一张图像上进行 blitting

问题描述

我目前正在尝试使用 pygame 模块在 pyton 中开发我的第一个游戏。我在两个单独的图层中渲染我的地图,背景和前景。如果我想创建另一个 pygame.Surface 对象,我将前景 blit 到背景上。以下是 pygame.Surface 对象的原始统计信息。

背景:

Background

前景:

foreground

]

这是在名为 IMAGE 的新 Surface 上对图像进行 blitting 的代码

self.IMAGE = pygame.Surface((self.width*self.tile_size,self.height*self.tile_size))
self.IMAGE.blit(self.Image_background,(0,0))
self.IMAGE.blit(self.Image_foreground,0))

以及将它们显示到 self.WINDOW 上的代码

self.WINDOW.blit(self.MAP.IMAGE,0))

即使我这样做:

self.WINDOW.blit(self.MAP.Image_background,0))
self.WINDOW.blit(self.MAP.Image_foreground,0))

我总是以空白屏幕结束,只显示背景颜色。返回的图像 MAP.IMAGE 除外具有所有需要的属性

complete

非常感谢您的帮助!提前致谢!

编辑: 这是我更新显示代码

    def update_display(self):
        pygame.display.update()
        self.WINDOW.fill(BLACK)
        if self.SCREEN == "MENU":
            self.render_menu()
        if self.SCREEN == "NEW MAP":
            self.render_builder()
        pygame.display.flip()

这是我用于显示对象(仅地图)的代码

def render_builder(self):
        if self.LAYER == self.layers[0]:
            self.display(self.MAP.Image_background,(self.MAP.pos_x,self.MAP.pos_y),scale=False)
        elif self.LAYER == self.layers[1]:
            self.display(self.MAP.Image_foreground,scale=False)
        elif self.LAYER == self.layers[2]:
            print(self.LAYER)
            self.display(self.MAP.Image_background,scale=False)
            self.display(self.MAP.Image_foreground,scale=False)

        self.display(self.right_bar,self.right_bar.topleft,(123,100,123))

这是我在 Surface 上显示任何内容代码

    def display(self,what,where=None,color=None,scale=True):
        '''"WHAT" is either a Rect,Surface or String
        If displaying a String,no "WHERE" is needed,otherwise use a Tuple (x,y)
        Default "COLOR" is White,use a tuple to change that (Red,Green,Blue)'''
        if type(what) == pygame.Rect:
            if color:
                pygame.draw.rect(self.WINDOW,color,what)
            else:
                pygame.draw.rect(self.WINDOW,WHITE,what)
        elif type(what) == pygame.Surface:
            if scale:
                what = pygame.transform.scale(what,(self.true_tilesize,self.true_tilesize))
                self.WINDOW.blit(what,where)
            else:
                self.WINDOW.blit(what,where)
        elif type(what) == str:
            if color:
                text_surface = self.FONT.render(what,False,color)
            else:
                text_surface = self.FONT.render(what,BLACK)
            text_rect = text_surface.get_rect()
            text_rect.center = where
            self.WINDOW.blit(text_surface,text_rect)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)