Skocz do zawartości

Samozapętlenie w switchu


Mentoss

Rekomendowane odpowiedzi

Mam taki oto kod:

GML
switch (tryb)

{

case 0:

if file_exists('res\list')

{

bar_redraw(0,'Odczytywanie listy zasobów.');

tryb=1;

}

else

{

bar_redraw(0,'Brak ważnych plików. Ładowanie zatrzymane.');

tryb=254;

wait(5*room_speed);

};

break; // ten case się wykonuje. Bez problemu.

case 1:

show_message('B4'); // to wykonuje się setkiii razy (nie wiem, czy w tym samym stepie, czy co step.)

cad('res\list','tempfiles\t0'); // to się wykonuje

show_message('AftR.'); // to się już nie wykonuje

wait(10);

break;

// (...)

}

wiadomość "B4" zaczyna latać, jakby była wsadzona luzem, bez żadnego warunku. Tymczasem nie widać skutków funkcji cad(); wywołującej dlla kopiującego plik, oraz wiadomości "AftR". Po prostu znikają bez wieści.

Co ciekawsze, gdyby jednak usunąć linijkę z wiadomością "B4", cad(); zawiesza proces.

Błędu w cad(); nie ma. Sprawdzam działanie w projekcie kontrolnym, wszystko działa, zero zwieszeń, efekt zadowalający.

 

- - -

 

Edit: Przeglądałem foldery raz jeszcze. I udało mi się znaleźć efekt działania dlla. Jednak się wykonuje. W dalszym ciągu jednak mamy zapętlenie i brak wiadomości "AftR"

Odnośnik do komentarza
Udostępnij na innych stronach

Mówiąc szczerze, przez myśl by mi nie przeszło, żeby w ten sposób sprawdzić, dzięki.

cad() wygląda tak:

GML
external_call(odkoduj,argument0,argument1);
odkoduj to zmienna globalna (globalvar'em zrobiona) przechowująca ID z external_define(). W samym skrypcie dlla nie ma ani jednego breaka, i ani jednego exita.
Odnośnik do komentarza
Udostępnij na innych stronach

GML (funkcja wait)
instance_create(0,0,o_waiter);

o_waiter.ide=id; // A

o_waiter.tryb=tryb+1; // B

o_waiter.alarm[0]=argument0;

tryb=254;

Po czym w tamtym switchu dla case 254 jest zwykły break; Taka mała operacja opóźniająca dalsze działania ze względu na problem z tego tematu. o_waiter ma natomiast w alarm[0] przywrócenie instancji zapisanej w zmiennej ide trybu (kom. A), który otrzymała przy stworzeniu (kom. B ). wait(10); daje nam więc tymczasowy skok trybu na 254, a 10 stepów dalej przejście na poprzedni tryb+1.

 

Wpadłem na pomysł, żeby wszystkie cad() poprzesuwać na koniec case'ów, i działa, ale nie można tego tak zostawić.

 

- - -

 

EDIT:

Nadprogramowy break/exit w kodzie dlla nie powinien przerywać switcha w GMie, prawda?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...