【问题标题】:Pygame, is there a way to make "screen layers"?Pygame,有没有办法制作“屏幕图层”?
【发布时间】:2024-04-21 13:50:01
【问题描述】:

我正在开发一款作为学校项目的 Tank 游戏,并且我正在努力使其尽可能用户友好(使用可自定义的键绑定、显示设置等内容)。但是,我不希望游戏窗口失去比例,所以我想我会在游戏窗口的两侧添加边框以支持宽屏幕。

我附上了一张图片来说明我在寻找什么:

因此,要使其正常工作,我需要一种制作“屏幕图层”的方法。基础层是整个屏幕,在其两侧添加了一些图形和一个显示乐谱的字体。然后会在屏幕中间渲染第二层,这将是游戏窗口,其宽度和高度将明显小于基础层。

目前,游戏从屏幕的左上角开始渲染,直到所有的图块都被渲染出来。所以这就是为什么我认为最好在位于屏幕表面中间的单独表面上渲染图块。

非常感谢一些关于如何使这成为可能的提示! :) 我在 Classes 和 pygame 方面没有太多经验,所以如果你也能给出一个充实的描述,那就太棒了! :D

【问题讨论】:

    标签: python pygame screen layer


    【解决方案1】:

    只需在不同的表面上绘制不同的东西。

    例如,为您的游戏窗口创建一个Surface(我们称之为game_surf),然后在新的Surface 上绘制您的坦克和子弹等,而不是pygame 主窗口(这只是另一个@ 987654324@).

    # the main window
    screen = pygame.display.init() 
    
    # just a regular surface
    game_surf = pygame.surface.Surface(width, height)
    
    ...
    # in your main loop
        # or however you draw your sprites
        your_sprite_group.draw(game_surf)
    

    然后blit到屏幕上

    screen.blit(game_surf, the_position)
    

    【讨论】:

      【解决方案2】:

      最简单的方法:为每个“层”创建一个组。

      import pygame
      front_sprites = pygame.sprite.Group()
      middle_sprites = pygame.sprite.Group()
      background_sprites = pygame.sprite.Group()
      

      然后,只需按以下顺序将它们全部绘制到屏幕上:

      background_sprites.draw(screen)
      middle_sprites.draw(screen)
      front_sprites.draw(screen)
      

      【讨论】: