活动#

介绍#

事件允许您使用事件对象并行运行函数。无需逐个调用函数或线程,事件允许您注册函数,然后一次性触发所有函数。每个注册函数都在其自己的线程中运行,因此您的机器人可以同时执行多项操作,例如闪烁 TouchLED 和驾驶。

以下是可用方法和构造函数的列表:

  • Event – 创建一个新的事件对象。

  • event – 将函数注册到事件对象,可选择携带参数。

  • broadcast – 触发事件对象中所有已注册的函数并行运行。

  • broadcast_and_wait – 触发事件对象中所有已注册的函数,并等待它们完成后再继续。

创建事件对象#

Event 构造函数用于创建一个事件对象,该对象在单独的线程中管理函数的执行。

用法:
Event()

范围

描述

此构造函数没有参数。

# Blink the screen while moving forward
# Create move_event as an Event object
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)

将函数注册到事件#

当您将一个函数注册到某个事件时,它将在事件广播时在单独的线程中执行。

用法:
event(回调,args)

范围

描述

事件

先前创建的事件对象的名称。

回调

先前定义的在事件广播时执行的函数。

args

可选。包含要传递给回调函数的参数的元组。更多信息请参阅使用带参数的函数

# Blink the screen while turning
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

def turning():
    drivetrain.turn(RIGHT)

# Register multiple functions to the Event object
move_event(blink_screen)
move_event(turning)

move_event.broadcast()

# Move in a specified direction
move_event = Event()

def move_distance(movement_angle):
    drivetrain.turn_for(RIGHT, movement_angle, DEGREES)
    drivetrain.drive_for(FORWARD, 100, MM)

# Change the parameter to modify how the robot moves
move_event(move_distance, (180,))
move_event.broadcast()

播送#

broadcast 会触发一个事件,并在单独的线程中启动所有已注册的函数。此方法不会暂停任何后续函数的执行。

用法:
event.broadcast()

范围

描述

事件

先前创建的事件对象的名称。

# Blink the screen while moving forward
# Create move_event as an Event object
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)

广播并等待#

broadcast_and_wait 启动一个事件,但等待所有已注册的函数完成后再继续执行后续函数。

用法:
event.broadcast_and_wait()

范围

描述

事件

先前创建的事件对象的名称。

# Move after the screen is pressed
move_event = Event()

def move_and_turn():
    drivetrain.drive_for(FORWARD, 150, MM)
    drivetrain.turn_for(RIGHT, 90)

move_event(move_and_turn)

while True:
    if brain.buttonCheck.pressing():
        move_event.broadcast_and_wait()
        break
brain.screen.print("Movement done.")