【问题标题】:Remove black border in pygame fullscreen在pygame全屏中删除黑色边框
【发布时间】:2023-03-07 08:07:02
【问题描述】:

我正在使用 pygame 1.9.6 创建游戏。但是,正如您通过运行这个简单的示例所看到的那样,窗口周围会出现一些黑色边框,即使带有 FULLSCREEN 标志也是如此。

import pygame
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((900, 500), FULLSCREEN)

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()

    screen.fill((255, 255, 255))
    pygame.display.flip()

我尝试在屏幕初始化中添加标志NOFRAME,但没有成功。

我想知道是否可以删除边框,例如通过增加屏幕尺寸以适合当前屏幕。但我也想保持900x500 的分辨率。

pygame 可以调整整个屏幕的大小吗?我必须blit() Surface 上的所有内容,然后重新缩放并在实际屏幕上绘制吗?

【问题讨论】:

  • 如果性能是一个问题,您可以尝试使用pygame.time.Clock().tick(30) 减慢您的游戏循环。对于缩放,您仍然使用全分辨率模式,但您在较小的表面上绘制并在传输到主屏幕时对其进行缩放。查看此帖子:reddit.com/r/pygame/comments/b8wwfr/…
  • 您可能知道,窗口周围的黑色是因为您的屏幕大于 900x500。除非您的屏幕尺寸恰好是 9x5 比例(我的不是),否则即使您将其缩放到屏幕尺寸,您仍然可能会在某处得到一点黑条。那是除非你在一个维度上拉伸它比另一个维度更多,在这种情况下你将不再得到圆形。
  • 您可以尝试在display.set_mode() 调用中使用pygame.SCALED 标志和FULLSCREEN。文档是这样描述的:pygame.SCALED resolution depends on desktop size and scale graphics
  • 感谢格伦麦金托什!我更新了我的 pygame 版本,它运行良好。

标签: python python-3.x pygame


【解决方案1】:

感谢@Glenn Mackintosh!

去除黑色边框最好的方法实际上是在屏幕声明中添加SCALED标志,如下所示:

screen = pygame.display.set_mode((900, 500), FULLSCREEN|SCALED)

但要使用它,需要pygame版本2.0.0或更高版本。

【讨论】:

    【解决方案2】:

    删除黑条的唯一方法是将pygame.display.set_mode((width, height)) 设置为用户分辨率。使用pygame.display.Info() 获取用户的显示分辨率。此外,您可以使用首选分辨率(例如 900 x 500)来获得“差分编号”,从而获得复古/像素化的外观。

    resolution = pygame.display.Info()
    width = resolution.current_w
    height = resolution.current_h
    dx = width // 900
    dy = height // 500
    

    然后可以使用这个 dxdy 将所有内容缩放到更大的尺寸。

    我会试试这个代码:

    import pygame
    from pygame.locals import *
    
    pygame.init() # You forgot the initialize the pygame window!
    resolution = pygame.display.Info() # Get the users resolution
    width = resolution.current_w
    height = resolution.current_h
    screen = pygame.display.set_mode((width, height), FULLSCREEN, 0, 32)
    
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                exit()
    
        screen.fill((255, 255, 255))
    
        mouse_pos = pygame.mouse.get_pos()
        pygame.draw.circle(screen, (0, 0, 255), mouse_pos, 20)
        pygame.draw.circle(screen, (0, 0, 200), mouse_pos, 18)
        pygame.draw.circle(screen, (0, 0, 100), mouse_pos, 15)
        pygame.draw.circle(screen, (0, 0, 50), mouse_pos, 10)
    
        pygame.display.flip()
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多