Python 基本游戏图形

Python 基本游戏图形,python,Python,我刚刚开始学习pygame图形。我在pygame中画了一个圆圈,并想知道如何对其进行编程以改变颜色。 例如:它将颜色从蓝色更改为红色 我需要它不断改变颜色,直到我关闭pygame,如果颜色从一个逐渐改变到另一个,而不是瞬间改变,那会很好吗?你知道我该怎么做吗 import pygame pygame.init() RED = (255, 0, 0) BLUE = ( 0, 0,255) BLACK = ( 0, 0, 0) SIZE = (1000,1000) screen

我刚刚开始学习pygame图形。我在pygame中画了一个圆圈,并想知道如何对其进行编程以改变颜色。
例如:它将颜色从蓝色更改为红色

我需要它不断改变颜色,直到我关闭pygame,如果颜色从一个逐渐改变到另一个,而不是瞬间改变,那会很好吗?你知道我该怎么做吗

import pygame
pygame.init()

RED =   (255,  0,  0)
BLUE =  (  0,  0,255)
BLACK = (  0,  0,  0)
SIZE = (1000,1000)
screen = pygame.display.set_mode(SIZE)

pygame.draw.circle(screen,RED,(500,500),200)

pygame.display.flip()
pygame.time.wait(3000)
pygame.quit()

Pygame没有场景图,因此您需要在循环中重新绘制形状,并调用display.flip()进行更新。

我将从简单到困难,再到复杂。
最简单:更改颜色3次的for循环,最简单:

import pygame
pygame.init()

RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0,0,0)
SIZE = (1000,1000)
screen = pygame.display.set_mode(SIZE)
colors = (RED, BLACK, BLUE) # tho allow you to iterate over the colors

for c in colors:
    pygame.draw.circle(screen,c,(500,500),200)
    pygame.display.flip()
    pygame.time.wait(1000)
pygame.quit()
中等:现在是一个无限循环,在关闭窗口时结束

import pygame, itertools

RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0,0,0)

colors = (RED, BLACK, BLUE) # to allow you to iterate over the colors

SIZE = (1000,1000)
screen = pygame.display.set_mode(SIZE)

# to cycle through the colors
cycle = itertools.cycle(colors) # create an infinite series..

clock = pygame.time.Clock() # regulate fps

while True:
    # handling events
    for event in pygame.event.get():
        if event.type == pygame.QUIT: # close window event
            pygame.quit()

    c = cycle.next()
    pygame.draw.circle(screen,c,(500,500),200)
    pygame.display.flip()

    clock.tick(6) # run at maximum 6 frames per second
最难和最复杂的:这是最后一个,颜色会褪色到下一个

import pygame, itertools

def fade_into(c1, c2, n):
    """ Give the next color to draw \n"""
    "Args: c1,c2 => colors, n => int"
    dif = [(c1[i]-c2[i])/float(n) for i in range(3)] # calculate the per-frame difference
    return [c1[i]-dif[i] for i in range(3)] # subtract that difference

RED = (255,0,0)
BLUE = (0,0,255)
BLACK = (0,0,0)

FADE_SPEED = 80 # no of frames for shifting

colors = (RED, BLACK, BLUE) # to allow you to iterate over the colors

SIZE = (1000,1000)
screen = pygame.display.set_mode(SIZE)

# to cycle through the colors
cycle = itertools.cycle(colors)

## needed for fading
c_color = cycle.next() # RED    current_color
n_color = cycle.next() # BLACK  next_color
frames = FADE_SPEED        
## --------------

clock = pygame.time.Clock() # regulate fps

while True:
    # handling events
    for event in pygame.event.get():
        if event.type == pygame.QUIT: # close window event
            pygame.quit()

    c_color = fade_into(c_color, n_color, frames) # get next color

    pygame.draw.circle(screen,map(int,c_color),(500,500),200)
    pygame.display.flip()

    frames -= 1
    if frames == 0: # translation complete
        frames = FADE_SPEED
        n_color = cycle.next() # get next color

    clock.tick(40) # run at maximum of 40 frames per second
如果您有任何疑问,请在下面进行评论


好先生,你应该得到一枚奖章。这是我在StackOverflow上看到的对任何问题的最有帮助和最深思熟虑的回答。如果所有回答的人都能像你一样把同样的想法放在回答中,我希望我能给出更多。