Python Pygame停车灯事件

Python Pygame停车灯事件,python,events,python-3.x,event-handling,pygame,Python,Events,Python 3.x,Event Handling,Pygame,我正试图在第8实验室中为该项目创建最后一个示例 我要实现的最后一件事是根据三个事件和计时器改变颜色的红绿灯 我知道我必须在某一点上使用pygame.time.set_timer(),但我还没有接触过pygame中的事件处理。我不知道我应该如何着手制作三个独立的事件,使每个相应的交通灯都变成明亮的颜色 这就是我到目前为止所做的,如果省略258到266,动画使用Pygame和Python3工作(我尝试连接“事件”,但显然不起作用) 这是一个修订版,我尝试使用计时器来改变颜色,而不是单独制作事件,但在

我正试图在第8实验室中为该项目创建最后一个示例

我要实现的最后一件事是根据三个事件和计时器改变颜色的红绿灯

我知道我必须在某一点上使用
pygame.time.set_timer()
,但我还没有接触过pygame中的事件处理。我不知道我应该如何着手制作三个独立的事件,使每个相应的交通灯都变成明亮的颜色

这就是我到目前为止所做的,如果省略
258
266
,动画使用Pygame和Python3工作(我尝试连接“事件”,但显然不起作用)

这是一个修订版,我尝试使用计时器来改变颜色,而不是单独制作事件,但在这种情况下也不起作用;(

随机导入
输入数学
#要求:
#修改先前的“创建图片”实验室,或启动一个新实验室。
#设置图像动画。请尝试以下一项或多项操作:
#在屏幕上移动项目。
#前后移动一个项目。
#向上/向下/对角移动。
#绕圈子。
#让某人挥动手臂。
#创建可更改颜色的红绿灯。
#进口声明
导入pygame
#定义颜色:
黑色=(0,0,0)
白色=(255,255,255)
红色=(255,0,0)
杜尔里德=(153,50,51)
绿色=(0,255,0)
杜尔格林=(5515454)
蓝色=(0,0255)
浅蓝色=(103255246)
黄色=(252255,31)
DULLYELLOW=(156157,50)
#初始化pygame:
pygame.init()
#屏幕:
大小=(700500)
screen=pygame.display.set_模式(大小)
#设置标题:
pygame.display.set_标题(“第8章实验室”)
#时钟:
clock=pygame.time.clock()
#FPS:
FPS=60
#游戏的布尔变量:
完成=错误
#对于白色圆圈的循环:
whiteCircleList=[]
对于范围(25)内的i:
x=random.randrange(0700)
y=random.randrange(0,50)
whiteCircleList.append([x,y])
#对于蓝色圆圈的循环:
blueCircleList=[]
对于范围(100)内的i:
circleX=random.randrange(0500)
circleY=random.randrange(0700)
blueCircleList.append([circleX,circleY])
#用于循环的浅蓝色圆圈:
lightBlueCircleList=[]
对于范围(100)内的i:
circleX=random.randrange(0500)
circleY=random.randrange(0700)
lightBlueCircleList.append([circleX,circleY])
#冲浪板矩形(x位置,y位置,x长度,y长度):
冲浪板Rect=pygame.Rect(32522550150)
boardY=255。
rectYChange=-5
相位=0
#左上角的对角矩形:
topLeftDiagonalRect=pygame.Rect(0,0,10,10)
#右上角的对角矩形:
topRightDiagonalRect=pygame.Rect(500,1,10,10)
#左上角矩形的对角矩形向量:
TopLeft对角线矩形交换=5
TopLeft对角线矩形更改=5
#右上角矩形的对角矩形向量:
TopRightDiagonalRectance=-5
TopRight对角矩形更改=-5
#手旋转角度
手角度=0
#交通灯罩的变量:
currentTopColor=DULLRED
currentMiddleColor=DULLYELLOW
currentBottomColor=绿色
虽然没有这样做:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
#游戏逻辑:
相位+=1
如果相位>180:
相位=相位*-1
#将精确位置另存为浮点以避免浮点错误:
boardY+=数学余弦(数学弧度(相位))*2
surfboardRect.y=int(boardY)
#清除屏幕:
屏幕填充(红色)
#图纸代码:
#下降圈:
对于范围内的i(len(whiteCircleList)):
pygame.draw.circle(屏幕,白色,[whiteCircleList[i][0],whiteCircleList[i][1]],3)
白圈列表[i][1]+=5
#如果矩形位于屏幕底部,请使其显示在顶部上方10像素处:
如果白圈列表[i][1]>450:
x=random.randrange(0700)
白圈列表[i][0]=x
y=随机。随机范围(-50,-10)
白圈列表[i][1]=y
#红色下降圆圈:
对于范围内的i(len(蓝色圆圈列表)):
pygame.draw.circle(屏幕,蓝色,[blueCircleList[i][0],blueCircleList[i][1]],5,5)
蓝圈列表[i][1]=5
如果blueCircleList[i][1]<50:
circleX=random.randrange(0700)
circleY=random.randrange(400500)
blueCircleList[i][0]=circleX
蓝圈列表[i][1]=circleY
#浅蓝色向上落圆:
对于范围内的i(len(lightBlueCircleList)):
pygame.draw.circle(屏幕,浅蓝色,[lightBlueCircleList[i][0],浅蓝色CircleList[i][1]],3,3)
lightBlueCircleList[i][1]=5
如果lightBlueCircleList[i][1]<50:
circleX=random.randrange(0700)
circleY=random.randrange(400450)
lightBlueCircleList[i][0]=circleX
lightBlueCircleList[i][1]=circleY
#修订的冲浪板矩形代码:
pygame.draw.rect(屏幕,黑色,冲浪板rect,0)
#左上角对角矩形代码:
pygame.draw.rect(屏幕,黑色,左上角对角线,0)
#添加左上角的对角矩形更改向量
topLeftDiagonalRect.x+=TopLeftDiagonalRechange
topLeftDiagonalRect.y+=topLeftDiagonalRectYChange
#上下屏幕碰撞:

如果topLeftDiagonalRect.y>=500或topLeftDiagonalRect.y则
设置计时器不应在主循环的每个循环中执行,您可以在外部调用它,它将每3000ms重复一次

# Current Light
light_on = 0  # 0-red 1-yellow 2-green

LIGHTS_EVENT = pygame.USERVENT + 0   # Event code for Lights change
pygame.time.set_timer(LIGHTS_EVENT, 3000)

while not done:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        if event.type == LIGHTS_EVENT:
            light_on += 1
            if light_on == 3:
                light_on = 0


    currentTopColor = DULLRED
    currentMiddleColor = DULLYELLOW
    currentBottomColor = DULLGREEN
    if light_on == 0:
        currentTopColor = RED
    if light_on == 1:
        currentMiddleColor = YELLOW
    if light_on == 2:
        currentBottomColor = GREEN

    # Top light:
    ...

很多时候,如果你把代码归结为你昨天发布的这个问题,我们会更容易发现问题。。。
# Current Light
light_on = 0  # 0-red 1-yellow 2-green

LIGHTS_EVENT = pygame.USERVENT + 0   # Event code for Lights change
pygame.time.set_timer(LIGHTS_EVENT, 3000)

while not done:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        if event.type == LIGHTS_EVENT:
            light_on += 1
            if light_on == 3:
                light_on = 0


    currentTopColor = DULLRED
    currentMiddleColor = DULLYELLOW
    currentBottomColor = DULLGREEN
    if light_on == 0:
        currentTopColor = RED
    if light_on == 1:
        currentMiddleColor = YELLOW
    if light_on == 2:
        currentBottomColor = GREEN

    # Top light:
    ...