Mentoss Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 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 Więcej opcji udostępniania...
hudy0070 Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 Wywal na chwile funkcję cad() i zobacz czy dostajesz oba komunikaty, jeżeli tak to problemu musisz szukać w funkcji cad. EDIT być może w funkcji cad() masz jakieś break albo exit. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 31 Sierpnia 2011 Autor Udostępnij Opublikowano 31 Sierpnia 2011 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 Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 Do switcha, gdzie jest case 1, dodaj linijkę: GML tryb = 2 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mentoss Opublikowano 31 Sierpnia 2011 Autor Udostępnij Opublikowano 31 Sierpnia 2011 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 Więcej opcji udostępniania...
hudy0070 Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 Szczerze nie wiem czy break w kodzie dll ma jakiś wpływ na pętle w GM. Zapytaj się o to kogoś kto ma na co dzień do czynienia z dll'ami, YXE powinien wiedzieć takie rzeczy zdaje mi się. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Shockah Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 ...a może wstawić zwykłe nawiasy klamrowe między case a break...? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hudy0070 Opublikowano 31 Sierpnia 2011 Udostępnij Opublikowano 31 Sierpnia 2011 GML switch (<expression>) { case <expression1>: <statement1>; ...; break; case <expression2>: <statement2>; ...; break; ... default: <statement>; ... } Z tego wynika, że nawiasy klamrowe nie są potrzebne w switch'u. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę