Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame混合全屏Bug_Python_Pygame_Fullscreen_Blend - Fatal编程技术网

Python Pygame混合全屏Bug

Python Pygame混合全屏Bug,python,pygame,fullscreen,blend,Python,Pygame,Fullscreen,Blend,好的,所以我一直在使用一个特殊的混合曲面为我在pygame中制作的一个小游戏添加一些灯光 当程序打开窗口时,它工作得很好。然而,每当我尝试使窗口全屏时,混合曲面不会与其他组件全屏显示,它只是从屏幕边缘延伸出来。因此,过渡到过渡曲面的任何渐变也位于错误的位置 我知道这是特殊_标志的问题(而不是我不正确地屏蔽曲面),因为当我删除特殊_标志参数时,曲面会用其余组件完美地填充屏幕 基本上,我是在寻求一种修复这个bug的方法,这样我就可以保留这个特殊的_flags参数,而不会在全屏上破坏它。这样我就不

好的,所以我一直在使用一个特殊的混合曲面为我在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位游戏),这会导致出现错误。如果我将分辨率更改为兼容的分辨率,它将修复错误