Python 如何在pygame中使对象褪色

Python 如何在pygame中使对象褪色,python,pygame,Python,Pygame,我想要一个长方形从绿色变为红色的生活吧,但在互联网上找不到简单的方法 我试着这样做(只是为了从红色变为黄色): 我还尝试使用范围(0255)内的I的来执行此操作: 上面写着pygame.draw.rect(win,(colorR,colorG,colorB),(10,10,200,50),0) TypeError:无效的颜色参数 但是,当我像这样画矩形时: colorR = 0 colorG = 255 colorB = 0 pygame.draw.rect(win, (colorR, colo

我想要一个长方形从绿色变为红色的生活吧,但在互联网上找不到简单的方法

我试着这样做(只是为了从红色变为黄色):

我还尝试使用范围(0255)内的I的
来执行此操作:

上面写着
pygame.draw.rect(win,(colorR,colorG,colorB),(10,10,200,50),0)
TypeError:无效的颜色参数

但是,当我像这样画矩形时:

colorR = 0
colorG = 255
colorB = 0
pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
矩形显示为绿色

我的方法正确吗,或者我有。以完全不同的方式去做? 谢谢你的回答

编辑: 这是整个程序,其中可能有错误,因为矩形在得到最终颜色之前没有出现

import pygame, math
pygame.init()
length = 1440
heigth  = 700
win = pygame.display.set_mode((length, heigth))#, pygame.FULLSCREEN)
menuImg = pygame.image.load('menu_img.jpg')
laser = pygame.image.load('projectile.png')
clock = pygame.time.Clock()
game = False
def rgw():  
    win.fill((0, 0, 255))
    if game:
        print("game")
        colorR = 0
        colorG = 255
        colorB = 0
        change = True
        while change:
            pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
            colorR += 1
            if colorR == 255:
                change = False
        pygame.display.flip()
    pygame.display.update()
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            game = True

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                run = False

    rgw()
pygame.quit()

要使显示界面的更改可见,必须调用
pygame.display.flip()
pygame.display.update()
。此外,我建议通过
pygame.event.get()
pygame.event.pump()

注意,您必须在循环中进行延迟,否则颜色将快速褪色。如果颜色不在[0255]范围内,则会出现“颜色参数无效”错误。这是因为示例中的循环从未终止。您错过了
change=False

无论如何,因为您有一个应用程序循环,所以不需要在单独的循环中进行淡入淡出。使用主应用程序循环:

game=True
颜色R=0
颜色G=255
颜色B=0
def rgw():
全局颜色R、颜色G、颜色B
win.fill((0,0,255))
如果游戏:
pygame.draw.rect(赢,(colorR,colorG,colorB),(10,10200,50),0)
如果颜色R<255:
颜色R+=1
pygame.display.update()
运行=真
运行时:
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.MOUSEBUTTONDOWN:
游戏=真实
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_退格:
运行=错误
rgw()
pygame.quit()

我已经有了pygame.display.update(),但它在while循环后缩进为“color=…”,我是否必须将其放入while?谢谢@rabbi76,但矩形在其颜色为黄色之前不会出现。也许如果我发布整个程序,我会更容易帮助meso在“colorR+=1”之后添加“pygame.time.delay()”,而我真的不明白处理事件的方法是什么(可能问题来自这里…),我的意思是我不明白它在使用时的作用,除了我使用键盘字母或mouse@bappi事件处理也处理内部事件。在某些系统上,需要更新显示器并正确处理时钟(例如windows消息循环)。
import pygame, math
pygame.init()
length = 1440
heigth  = 700
win = pygame.display.set_mode((length, heigth))#, pygame.FULLSCREEN)
menuImg = pygame.image.load('menu_img.jpg')
laser = pygame.image.load('projectile.png')
clock = pygame.time.Clock()
game = False
def rgw():  
    win.fill((0, 0, 255))
    if game:
        print("game")
        colorR = 0
        colorG = 255
        colorB = 0
        change = True
        while change:
            pygame.draw.rect(win, (colorR, colorG, colorB), (10, 10, 200, 50), 0)
            colorR += 1
            if colorR == 255:
                change = False
        pygame.display.flip()
    pygame.display.update()
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            game = True

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_BACKSPACE:
                run = False

    rgw()
pygame.quit()