Python 使用pygame 2.0.x设置gamma

Python 使用pygame 2.0.x设置gamma,python,python-3.x,pygame,Python,Python 3.x,Pygame,我创建了一个游戏,我想设置屏幕的gamma。例如: import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((600, 450)) font = pygame.font.SysFont('consolas', 25) red = 1 green = 1 blue = 1 while True: for event in pygame.event.get()

我创建了一个游戏,我想设置屏幕的gamma。例如:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((600, 450))
font = pygame.font.SysFont('consolas', 25)

red   = 1
green = 1
blue  = 1

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

    screen.fill((20, 20, 20))
    
    # draw colored zones
    for x in range(600):
        pygame.draw.line(screen, (x * 255 / 600, 0, 0), (x, 0), (x, 100))
    for x in range(600):
        pygame.draw.line(screen, (0, x * 255 / 600, 0), (x, 100), (x, 200))
    for x in range(600):
        pygame.draw.line(screen, (0, 0, x * 255 / 600), (x, 200), (x, 300))

    if pygame.mouse.get_pressed()[0]:
        x, y = pygame.mouse.get_pos()
        if y < 100:
            red   = x / 300
            pygame.display.set_gamma(red, green, blue)
        elif y < 200:
            green = x / 300
            pygame.display.set_gamma(red, green, blue)
        elif y < 300:
            blue  = x / 300
            pygame.display.set_gamma(red, green, blue)

    text = 'pygame.display.set_gamma(%.2f, %.2f, %.2f)' % (red, green, blue)
    text = font.render(text, 0, (255, 255, 255), True)
    screen.blit(text, (10, 440 - text.get_height())) # render the text

    pygame.display.flip()
导入pygame
从pygame.locals导入*
pygame.init()
screen=pygame.display.set_模式((600450))
font=pygame.font.SysFont('consolas',25)
红色=1
绿色=1
蓝色=1
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
退出()
屏幕填充((20,20,20))
#绘制彩色区域
对于范围(600)内的x:
pygame.draw.line(屏幕,(x*255/600,0,0)、(x,0)、(x,100))
对于范围(600)内的x:
pygame.draw.line(屏幕,(0,x*255/600,0),(x,100),(x,200))
对于范围(600)内的x:
pygame.draw.line(屏幕,(0,0,x*255/600),(x,200),(x,300))
如果pygame.mouse.get_按下()[0]:
x、 y=pygame.mouse.get_pos()
如果y<100:
红色=x/300
pygame.display.set_gamma(红色、绿色、蓝色)
elif y<200:
绿色=x/300
pygame.display.set_gamma(红色、绿色、蓝色)
如果y<300:
蓝色=x/300
pygame.display.set_gamma(红色、绿色、蓝色)
text='pygame.display.set_gamma(%.2f、%.2f、%.2f)'(红色、绿色、蓝色)
text=font.render(text,0,(255,255,255),True)
blit(text,(10440-text.get_height())#渲染文本
pygame.display.flip()
但是,当我将pygame版本更新到2.0.0.dev6时,gamma校正不起作用,我看到了难看的颜色,蓝色和黄色不规则地闪烁

我在Windows10上

编辑1 经过调查,绿色似乎不由
set\u gamma
功能处理。当我更改颜色
(0,x*255/600,0)
中的x值时,什么都不会发生

编辑2 我现在有了最新的
pygame
版本-现在几乎什么也没发生。
根据文件,

并非所有系统和硬件都支持gamma斜坡

好的!也许我的电脑不能处理这个功能!但是:

如果函数成功,它将返回True

我得到了
真值
,即使没有任何东西能像预期的那样工作。
有人能清楚地看到这些乱七八糟的bug吗?

我帮助开发pygame

谢谢你的报道,我相信这是pygame中的一个bug

我可以复制你说的所有内容,除了display.set_gamma()返回
True
即使成功了。对我来说,它总是返回
False

除此之外,我在pygame源代码中找到了bug的来源,并提交了一个补丁来修复它

假设这被合并,这个bug将在PyGame2.0.2中修复

但是您可能希望您的代码尽快工作,因此您有两个选择

  • 暂时降级到pygame 1.9.6,然后在发布后升级到2.0.2
  • 在windows上从源代码构建pygame(有点困难)
  • 如果您使用的是Python3.8 64位,我可以向您发送一个pygame 2.0.2.dev1的
    wheel
    文件,供pip从中安装

编辑:我刚刚意识到你在八月份发布了这个。对不起,这花了这么长时间。如果您将来遇到这样的问题,github上的pygame问题跟踪程序就是报告这些信息的地方:

如果您确实以正确的方式更新了pygame,那么就不应该有旧的pygame版本供您保留或删除。正如上面所说:
安装pygame的最佳方法是使用pip工具(这是python用来安装软件包的工具)。
相应地,更新pygame的预期方法是使用
--upgrade
标志来升级
pip
。我现在有了最新的pygame版本。现在,这个错误已经修复,但是。。。当我调用
pygame.display.set\u gamma
时,不会发生任何事情。正如关于
设置\u gamma
所述,1.0是正常的gamma值。所以它不像我想的那样在0到255之间。但是什么都没有发生,没有任何价值。它对你有什么作用?问题是否来自我的计算机?如果在绘制线之前设置gamma会发生什么?另外,你到底期望事物在视觉上发生怎样的变化?另外,你应该问一个新问题。我想这可以帮助我:“不是所有的系统和硬件都支持gamma渐变”-edit:但是“如果函数成功,它将返回True。”>它除了我得到True之外什么都不做?