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:
Sukurkite įvykį naudodami
Event.Užregistruokite funkciją, kuri suveiktų, kai transliuojamas
Event, iškviečianteventobjektą su funkcija kaip argumentu.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 |
|---|---|
|
Anksčiau sukurto įvykio objekto pavadinimas. |
|
Anksčiau apibrėžta funkcija, kuri turi būti vykdoma, kai įvykis transliuojamas. |
|
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 |
|---|---|
|
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 |
|---|---|
|
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.")