Python Pygame混合全屏Bug
好的,所以我一直在使用一个特殊的混合曲面为我在pygame中制作的一个小游戏添加一些灯光 当程序打开窗口时,它工作得很好。然而,每当我尝试使窗口全屏时,混合曲面不会与其他组件全屏显示,它只是从屏幕边缘延伸出来。因此,过渡到过渡曲面的任何渐变也位于错误的位置 我知道这是特殊_标志的问题(而不是我不正确地屏蔽曲面),因为当我删除特殊_标志参数时,曲面会用其余组件完美地填充屏幕 基本上,我是在寻求一种修复这个bug的方法,这样我就可以保留这个特殊的_flags参数,而不会在全屏上破坏它。这样我就不必完全重做我的照明 下面是将曲面(雾面)绘制到游戏显示的代码Python Pygame混合全屏Bug,python,pygame,fullscreen,blend,Python,Pygame,Fullscreen,Blend,好的,所以我一直在使用一个特殊的混合曲面为我在pygame中制作的一个小游戏添加一些灯光 当程序打开窗口时,它工作得很好。然而,每当我尝试使窗口全屏时,混合曲面不会与其他组件全屏显示,它只是从屏幕边缘延伸出来。因此,过渡到过渡曲面的任何渐变也位于错误的位置 我知道这是特殊_标志的问题(而不是我不正确地屏蔽曲面),因为当我删除特殊_标志参数时,曲面会用其余组件完美地填充屏幕 基本上,我是在寻求一种修复这个bug的方法,这样我就可以保留这个特殊的_flags参数,而不会在全屏上破坏它。这样我就不
def render_fog(self):
#draw light onto fog
for fog in self.all_fog:
fog.image.fill(fog.colour)
self.light_rect.centerx = self.player.rect.centerx - fog.x
self.light_rect.centery = self.player.rect.centery - fog.y
fog.image.blit(self.light_mask, self.light_rect)
for light in self.all_light:
light.centerx = light.x
light.centery = light.y
fog.image.blit(light.image, (light.rect))
self.gameDisplay.blit(fog.image, (fog.x, fog.y), special_flags = pygame.BLEND_MULT)
这里有一个例子显示了全屏显示时的相同错误,只需按f键即可
import pygame
import sys
from os import path
from time import sleep
import random
WIDTH = 864
HEIGHT = 512
NIGHT_COLOR = (20, 20, 20)
RED = (255, 0, 0)
class Game:
def __init__(self):
pygame.init()
self.gameDisplay = pygame.display.set_mode((WIDTH, HEIGHT))
self.clock = pygame.time.Clock()
self.running = True
self.fullscreen = False
self.load_data()
def load_data(self):
self.fog = pygame.Surface((WIDTH, HEIGHT))
self.fog.fill(NIGHT_COLOR)
def quit(self):
pygame.quit()
sys.exit()
def run(self):
self.playing = True
while self.playing:
self.dt = self.clock.tick(60) / 1000
self.events()
self.draw()
def events(self):
for e in pygame.event.get():
if e.type == pygame.QUIT:
self.quit()
if e.type == pygame.KEYDOWN:
if e.key == pygame.K_f:
self.fullscreen = not self.fullscreen
def render_fog(self):
self.fog.fill(NIGHT_COLOR)
self.gameDisplay.blit(self.fog, (0, 0), special_flags =
pygame.BLEND_MULT)
def draw(self):
pygame.display.set_caption("FPS:
{:.2f}".format(self.clock.get_fps()))
if self.fullscreen:
self.gameDisplay = pygame.display.set_mode((864, 512),
pygame.FULLSCREEN)
else:
self.gameDisplay = pygame.display.set_mode((864, 512))
self.gameDisplay.fill(RED)
self.render_fog()
pygame.display.update()
g = Game()
while g.running:
g.run()
请发一封信。我们可能也需要这些图像。我添加了一个示例,显示了相同的错误,我无法嵌入图像,因此提供了链接。我做了一些实验,但我不确定在Python中使用全屏模式(我通常只使用窗口模式)时实际发生了什么。显示器似乎不知怎么被拉长了。文档说:“当请求全屏显示模式时,有时无法精确匹配请求的分辨率。在这种情况下,pygame将选择最接近的兼容匹配。返回的曲面仍将始终匹配请求的分辨率。”我找到了解决问题的短期解决方案,然而,它确实需要改变游戏的分辨率。正如您所说,当pygame全屏运行时,它将尝试找到最接近兼容匹配的分辨率,因此游戏的分辨率必须与此匹配,以防止出现错误。例如,当pygame全屏显示时,我的当前分辨率为864 X 512,将其放大到最接近的兼容分辨率,即1024 X 768(因为它是32位游戏),这会导致出现错误。如果我将分辨率更改为兼容的分辨率,它会修复错误,请发布一个。我们可能也需要这些图像。我添加了一个示例,显示了相同的错误,我无法嵌入图像,因此提供了链接。我做了一些实验,但我不确定在Python中使用全屏模式(我通常只使用窗口模式)时实际发生了什么。显示器似乎不知怎么被拉长了。文档说:“当请求全屏显示模式时,有时无法精确匹配请求的分辨率。在这种情况下,pygame将选择最接近的兼容匹配。返回的曲面仍将始终匹配请求的分辨率。”我找到了解决问题的短期解决方案,然而,它确实需要改变游戏的分辨率。正如您所说,当pygame全屏运行时,它将尝试找到最接近兼容匹配的分辨率,因此游戏的分辨率必须与此匹配,以防止出现错误。例如,当pygame全屏显示时,我的当前分辨率为864 X 512,将其放大到最接近的兼容分辨率,即1024 X 768(因为它是32位游戏),这会导致出现错误。如果我将分辨率更改为兼容的分辨率,它将修复错误