Python 在pygame中为移动对象添加渐变

Python 在pygame中为移动对象添加渐变,python,pygame,gradient,trigonometry,Python,Pygame,Gradient,Trigonometry,我想在这个程序中为球添加渐变&也可能是波浪被吸引到背景的颜色中,就像发光一样,而不是一种颜色填充 我已经看了很多教程,但是没有一个对我的语法有多大意义,对我来说,一般的想法是令人困惑的,因为我有移动的对象,它们绘制了我想要添加渐变的空间。有人能告诉我如何做到这一点吗 代码: 使用空格更改背景色 第一行仅使用透明度-并且对于不同的背景色没有问题。 第二行只改变圆圈的颜色,这取决于背景颜色。 第三行和第四行是同一行,起始颜色不同,颜色和透明度不同,取决于背景颜色 第二行和最后一行在一种颜色背景下看起

我想在这个程序中为球添加渐变&也可能是波浪被吸引到背景的颜色中,就像发光一样,而不是一种颜色填充

我已经看了很多教程,但是没有一个对我的语法有多大意义,对我来说,一般的想法是令人困惑的,因为我有移动的对象,它们绘制了我想要添加渐变的空间。有人能告诉我如何做到这一点吗

代码:

使用空格更改背景色

第一行仅使用透明度-并且对于不同的背景色没有问题。 第二行只改变圆圈的颜色,这取决于背景颜色。 第三行和第四行是同一行,起始颜色不同,颜色和透明度不同,取决于背景颜色

第二行和最后一行在一种颜色背景下看起来不错,需要更多的工作来找到好看的褪色

import pygame
pygame.init()

screen = pygame.display.set_mode((600,200))

#--------------------------------------
# circles positions and transparency (x,y, alpha)

circles = []

for x in range(100):
    circles.append( [100+x*3, 200, x*2] )

#--------------------------------------

white = True # background color

#--------------------------------------

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_ESCAPE:
                running = False

            elif event.key == pygame.K_SPACE:
                white = not white

    #--------------------------------------

    if white:
        screen.fill((255,255,255))
    else:
        screen.fill((0,0,0))

    #--------------------------------------
    # first

    circle_img = pygame.Surface((20,20))
    pygame.draw.circle(circle_img, (255,0,0), (10,10), 10)
    circle_img.set_colorkey(0)

    for x in circles:

        circle_img.set_alpha(x[2])

        screen.blit(circle_img, (x[0],40))

    #--------------------------------------
    # second

    circle_img = pygame.Surface((20,20))

    for x in circles:

        pygame.draw.circle(circle_img, (255,255-x[2],255-x[2]), (10,10), 10)
        circle_img.set_colorkey(0)

        screen.blit(circle_img, (x[0],90))

    #--------------------------------------
    # last

    circle_img = pygame.Surface((20,20))

    for x in circles:

        pygame.draw.circle(circle_img, (255,255-x[2],255-x[2]), (10,10), 10)
        circle_img.set_colorkey(0)
        circle_img.set_alpha(x[2])

        screen.blit(circle_img, (x[0],140))

    #--------------------------------------

    pygame.display.flip()


pygame.quit()

你可以在Photoshop、Gimp甚至Inkscape中创建带有渐变的球的位图。它可以创建矢量图形,但你可以将其转换为位图。多亏了furas,渐变在创建条线时有一个有趣的用途。对于正弦波也可能有类似的发展吗?正弦波是由许多圆圈组成的-你可以使用带有圆圈的表面,并使用set_alpha使其透明。每个圆都可以有不同的透明,所以看起来可能会褪色。有没有可能举个例子?+我将继续研究这个问题
import pygame
pygame.init()

screen = pygame.display.set_mode((600,200))

#--------------------------------------
# circles positions and transparency (x,y, alpha)

circles = []

for x in range(100):
    circles.append( [100+x*3, 200, x*2] )

#--------------------------------------

white = True # background color

#--------------------------------------

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_ESCAPE:
                running = False

            elif event.key == pygame.K_SPACE:
                white = not white

    #--------------------------------------

    if white:
        screen.fill((255,255,255))
    else:
        screen.fill((0,0,0))

    #--------------------------------------
    # first

    circle_img = pygame.Surface((20,20))
    pygame.draw.circle(circle_img, (255,0,0), (10,10), 10)
    circle_img.set_colorkey(0)

    for x in circles:

        circle_img.set_alpha(x[2])

        screen.blit(circle_img, (x[0],40))

    #--------------------------------------
    # second

    circle_img = pygame.Surface((20,20))

    for x in circles:

        pygame.draw.circle(circle_img, (255,255-x[2],255-x[2]), (10,10), 10)
        circle_img.set_colorkey(0)

        screen.blit(circle_img, (x[0],90))

    #--------------------------------------
    # last

    circle_img = pygame.Surface((20,20))

    for x in circles:

        pygame.draw.circle(circle_img, (255,255-x[2],255-x[2]), (10,10), 10)
        circle_img.set_colorkey(0)
        circle_img.set_alpha(x[2])

        screen.blit(circle_img, (x[0],140))

    #--------------------------------------

    pygame.display.flip()


pygame.quit()