Postów:
28
Dołączył:
2009-01-21
Napisano dnia: 2011-02-05 23:59:11
Nie będę zakładał nowego tematu, więc zapytam tutaj.
Czy jest jakaś możliwość, żeby np. w środku misji zrobić pętlę, która będzie sama sprawdzać (w tle) jakiś warunek, np. czy gracz jest ścigany przez policję?
Wiem, że można zrobić to poprzez gosub do pętli, która to sprawdzi, ale pytam tak z ciekawości.
___________________
Postów:
878
Dołączył:
2009-01-20
Napisano dnia: 2011-02-06 01:16:55
Nowy problem - nowy temat.
Tak, jest to bardzo proste do zaimplementowania, jeśli używasz konstrukcji wysokiego poziomu używając pętli while i warunków if. Tutorial na ten temat jest już w robocie.
___________________
Administrator
Postów:
28
Dołączył:
2009-01-21
Napisano dnia: 2011-02-06 09:39:13
Czy mógłbyś podać przykłąd takiej pętli (jeśli nie jest to bardzo skomplikowane)? I czy trzeba wcześniej podać jakiś warunek np. $ONMISSION == 1 tak, żeby pętla wykonywała sprawdzenie w tle?
___________________
Postów:
878
Dołączył:
2009-01-20
Napisano dnia: 2011-02-06 10:36:13
Nie jest to w stylu wywołania funkcji, czy coś takiego. To jest cały sposób pisania misji. Zamiast tworzyć wiele pętel złożonych z jumpów, można zrobić jedną i w niej wiele sprawdzeń:
Kod:
while true
wait 0
if
00EC: actor
$PLAYER_ACTOR 0 near_point 1812.369 -1929.922 radius 80.0 80.0
then
if
010F: player
$PLAYER_CHAR wanted_level > 0
then
if
0118: actor
0@ dead
then
break
end
end
Można dać dowolną ilość sprawdzeń, które de facto będą wykonywane jednocześnie.
Jeśli aktor 0@ zginie, to następuje wyjście z pętli instrukcją
break, której można też użyć w dowolnym innym miejscu w środku pętli
while.
___________________
Administrator
Postów:
28
Dołączył:
2009-01-21
Napisano dnia: 2011-02-06 12:16:57
Czyli jeśli dobrze rozumiem, to break powoduje zakończenie sprawdzania warunków w tej pętli? Wystarczy, że zrobię jedną taką pętlę i ona będzie cały czas sprawdzać warunki, mimo że w dalszym kodzie mam wiele innych normalnych pętlli?
___________________
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2011-02-06 12:47:50
Nie. Pętla while jest po prostu konstrukcją wysokiego poziomu, która przy kompilacji zostaje zamieniona na normalne opcody. Nie rozdwoisz działania jednego wątku, musisz sprawdzać wszystko po kolei.
A 'break' powoduje skompilowanie w tym miejscu jumpa tuż pod pętlę while. O tym niedługo więcej w poradniku, który się tworzy.
___________________
Moderator
Postów:
28
Dołączył:
2009-01-21
Napisano dnia: 2011-02-06 13:41:11
Ok, już wszystko rozumiem. Dzięki za wyjaśnienie.
___________________