我刚开始学习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()
Run Code Online (Sandbox Code Playgroud)
我将从简单到更难,更复杂.
最简单:一个for循环,改变颜色3次,最简单:
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()
Run Code Online (Sandbox Code Playgroud)
中:现在是一个无限循环,当你关闭窗口时结束
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
Run Code Online (Sandbox Code Playgroud)
最难和最复杂的:这是最后一个,颜色逐渐淡入下一个......
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
Run Code Online (Sandbox Code Playgroud)
如果您有任何疑问,请在下面评论..