Renginiai#

Įvadas#

Įvykiai leidžia vykdyti funkcijas lygiagrečiai. Užuot iškvietę funkcijas iš eilės, galite užregistruoti kelias funkcijas įvykyje ir suaktyvinti jas visas vienu metu. Kiekviena užregistruota funkcija veikia savo gijoje, todėl jūsų robotas gali atlikti kelias užduotis vienu metu, pavyzdžiui, rodyti reikšmes ekrane vairuodamas.

Norėdami sukurti ir naudoti įvykį, atlikite šiuos veiksmus tokia tvarka:

  1. Sukurkite įvykį naudodami Event.

  2. Užregistruokite funkciją, kuri suveiktų, kai transliuojamas Event , iškviečiant event objektą su funkcija kaip argumentu.

  3. Broadcast an Event:

    • broadcast — Suaktyvina visas įvykio objekte užregistruotas funkcijas, kad jos veiktų vienu metu.

    • broadcast_and_wait – Suaktyvina visas įvykio objekte užregistruotas funkcijas ir palaukia, kol jos bus baigtos, prieš tęsiant.

Sukurti įvykį#

Event įvykis sukuria įvykio objektą, kuris valdo funkcijų vykdymą atskirose gijose.

Usage:
Event()

Parametras

Aprašymas

Šis konstruktorius neturi parametrų.

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

Funkcijų registravimas įvykyje#

Kai užregistruosite funkciją įvykyje, ji bus vykdoma atskirame gijoje, kai įvykis bus transliuojamas.

Usage:
event(callback, args)

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

callback

Anksčiau apibrėžta funkcija, kuri turi būti vykdoma, kai įvykis transliuojamas.

args

Pasirinktinai. Argumentų tuple, kuris bus perduotas atgalinio iškvietimo funkcijai, rinkinys.

# 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()

Transliuoti įvykį#

broadcast#

broadcast sukelia įvykį, paleidžiantį visas registruotas funkcijas atskirose gijose. Šis metodas nesustabdo jokių vėlesnių funkcijų vykdymo.

Usage:
event.broadcast()

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

# 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 pradeda įvykį, bet palaukia, kol bus baigtos visos registruotos funkcijos, prieš tęsiant tolesnes funkcijas.

Usage:
event.broadcast_and_wait()

Parametras

Aprašymas

event

Anksčiau sukurto įvykio objekto pavadinimas.

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