活動#

介紹#

事件允許您並行運行函數。您無需按順序呼叫函數,而是可以將多個函數註冊到一​​個事件中,並一次觸發它們。每個註冊的函數都在其自身的線程中運行,從而使您的機器人能夠同時執行多個任務——例如在行駛過程中在螢幕上顯示數值。

若要建立和使用事件,請按以下步驟操作:

  1. 使用 Event 建立事件。

  2. 註冊一個函數,當廣播 Event 時,透過呼叫 event object 並將函數作為參數來觸發函數。

  3. Broadcast an Event:

    • broadcast — 觸發事件物件中所有已註冊的函數並發運行。

    • broadcast_and_wait — 觸發事件物件中所有已註冊的函數,並等待它們完成後再繼續。

建立活動#

Event 建立一個事件對象,該對像管理在單獨執行緒中執行的函數。

Usage:
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)

將函數註冊到事件#

當您將一個函數註冊到某個事件時,當該事件被廣播時,該函數將在單獨的執行緒中執行。

Usage:
event(callback, args)

範圍

描述

event

先前建立的事件物件的名稱。

callback

預先定義的函數,將在事件廣播時執行。

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#

broadcast 會觸發一個事件,並在單獨的執行緒中啟動所有已註冊的函數。此方法不會暫停任何後續函數的執行。

Usage:
event.broadcast()

範圍

描述

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)

broadcast_and_wait#

broadcast_and_wait 啟動一個事件,但等待所有已註冊的函數完成,然後繼續執行後續函數。

Usage:
event.broadcast_and_wait()

範圍

描述

event

先前建立的事件物件的名稱。

# 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.")