TeoTN Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 Czy ktoś ma pomysł jak wykonać pauzę, która wstrzyma wykonywanie funkcji (tylko tej jednej, jedynej :)) na określony czas? Coś jakby alarm, tylko dla funkcji... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 GML if( pauza == false ) funkcja(); ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 GM bez dodatku nie posiada wielowątkowości Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 11 Sierpnia 2009 Autor Udostępnij Opublikowano 11 Sierpnia 2009 Nie do końca :P Mam funkcję, która jest wywołana tylko raz - wykonuje się jej kod, a następnie po upływie określonego czasu ma się sama jeszcze raz wywołać i tak w kółko... Tylko nie mogę tego robić na alarmach ;/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 create zmienna = room_speed; step if( zmienna <= 0 ) { funkcja(); zmienna = room_speed; } else zmienna -= 1; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 11 Sierpnia 2009 Autor Udostępnij Opublikowano 11 Sierpnia 2009 To dalej nie jest to o co mi chodzi :P Obiekt, który wywołuje daną funkcję jest niszczony - więc żaden event nie może być wywołany :P Chodzi mi o "usamodzielnienie" funkcji ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 Zobacz sobie system delegacji Ranmusa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Xarfron Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 [skrypt : ] if global.pausa=0 { bla bla bla bla bla bla bla } Wykonaj_skrypt(bla,bla,bla) [koniec skryptu.] z tego co zrozumiałem to możesz zrobić coś takiego a potem normalnie dowolnie sobie ustawiasz tą pause jak chcesz gdy global.pausa=0 skrypt jest wykonywany a gdy 1 jest pausa proste :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 11 Sierpnia 2009 Autor Udostępnij Opublikowano 11 Sierpnia 2009 Tylko jak funkcja ma rozpoznać, że minęło już np. 10 sekund i zmienić tą zmienną? ;P Dzięki Tymon, zerknę ocb :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Xarfron Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 Tylko jak funkcja ma rozpoznać, że minęło już np. 10 sekund i zmienić tą zmienną? ;P Zależy jak chcesz by liczyło jeśli 0.1.2.3.4...10..0.1....... [skrypt : ] if global.pausa=0 { bla bla bla bla bla bla bla } Wykonaj_skrypt(bla,bla,bla) global.sekunda+=1/roomspeed //Lub też fps zależy kto jak woli if global.sekunda >10 { bla bla global.pausa=!global.pausa global.sekunda=0 } [koniec skryptu.] dałem sekundy jako globalna by można je było z zerować sekundy z startowego obiektu :) wystarczy trochę pomyśleć -_- my mamy wszystko za ciebie napisać trochę własnej inicjatywy :] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 11 Sierpnia 2009 Autor Udostępnij Opublikowano 11 Sierpnia 2009 No właśnie mi brakowało pomysłu :P Dzięki ;D @Tymon: To +- o to mi chodziło, ale to by było jak wbijanie papiaka młotem 10 kg :D EDIT: GM nie pozwala na takie cuda - wywoływanie z funkcji tej samej funkcji (o ile się nie mylę zwane rekurencją) powoduje zwiechę i wykopanie programu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Xarfron Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 No właśnie mi brakowało pomysłu :P Dzięki ;D @Tymon: To +- o to mi chodziło, ale to by było jak wbijanie papiaka młotem 10 kg :D EDIT: GM nie pozwala na takie cuda - wywoływanie z funkcji tej samej funkcji (o ile się nie mylę zwane rekurencją) powoduje zwiechę i wykopanie programu. Sprawdziłem i fakt ale zastanawia minę jeszcze jedno. Nie wydaje mi się żeby skrypt sam z siebie działać (z tego co zrozumiałem chcesz skasować obiekt i by skrypt wciąż działał ) jakbyś zostawił ten obiekt to wywołanie skryptu mógłbyś wrzucić np. do draw wtedy wyszyto było by jak jest tylko bez ?Wykonaj_skrypt(bla,bla,bla)? jako że draw by powodował ponowne wywołanie funkcji ---------------------------- Mógłbyś też mieć drugi obiekt do wyłączania i włączania funkcji po prostu w steps by miał ten obiekt global.sekunda+=1/roomspeed //Lub też fps zależy kto jak woli if global.sekunda >10 { bla bla global.pausa=!global.pausa global.sekunda=0 } Hmm ale niestety nie wiem jak zrobić skrypt który by się wykonywał cały czas po skasowaniu obiektu wywołującego :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 11 Sierpnia 2009 Autor Udostępnij Opublikowano 11 Sierpnia 2009 Po prostu chciałem, żeby skrypt żył samodzielnie - bez używania obiektu, bo tak mi jest wygodniej akurat w tym nietypowym projekcie :) Ale podejrzewam, że będę kombinował z tworzeniem kolejnego obiektu... PS A timelines nie załatwi sprawy? Ktoś może mi objaśnić jak to działa, bo nigdy się tym nie interesowałem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 11 Sierpnia 2009 Udostępnij Opublikowano 11 Sierpnia 2009 Rekurencja na pewno działa w GM, zwieche masz bo źle napisałeś funkcje i nigdy się nie kończy. Stuknij jeden obiekt Kontrolny i tyle, jaki w tym problem? Dasz mu persistent i git. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 12 Sierpnia 2009 Autor Udostępnij Opublikowano 12 Sierpnia 2009 W tym rzecz, że funkcja ma być po prostu wywoływana co 10 sekund aż do wyłączenia gry, ale widzę, że bez alarmów się nie obejdę :[ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Xarfron Opublikowano 12 Sierpnia 2009 Udostępnij Opublikowano 12 Sierpnia 2009 Przecież ci już napisałem jak obliczyć 10 sekund bez użycia alarmu skoro nie kasujesz obiektu to wystarczy. [create] sekunda=0 [draw] sekunda+=1/roomspeed //Lub też fps zależy kto jak woli if sekunda >10 { wywołaj_funkcje(bla,bla)//twoje finkcjia sekunda=0 } i gotowe -_- Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Sierpnia 2009 Udostępnij Opublikowano 12 Sierpnia 2009 Sieroty niemyślące. :] GML var o, c, a; // nowy obiekt o = object_add(); // dodaj kod create do obiektu object_event_add( o, ev_create, 0, 'alarm[0]=' + string( argument[1] ) + ';' ); // kod alarmu c = 'script_execute(' + string( argument[0] ) + ','; for( a = 0; a <= 13; a += 1 ) { if( is_string( argument[2 + a] ) ) c += '"' + string_replace( argument[2 + a], '"', '"+chr(34)+"' ) + '"'; else c += string( argument[2 + a] ); if( a != 13 ) c += ','; } c += ');instance_destroy();object_delete(' + string( o ) + ');'; // dodaj kod alarmu do obiektu object_event_add( o, ev_alarm, 0, c ); // stworz obiekt instance_create( 0, 0, o ); return o; GML script_timeout( jakis_script, room_speed * 5, 666, 'xD' ); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 12 Sierpnia 2009 Autor Udostępnij Opublikowano 12 Sierpnia 2009 Omg. Domyślam się, że to będzie działać (jutro sprawdzę, bo teraz padam), ale już 5 minut czytam, niby nie ma nic czego bym nie rozumiał, ale nie wiem jaki jest główny cel tej pętli ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 12 Sierpnia 2009 Udostępnij Opublikowano 12 Sierpnia 2009 Pętla wypisuje wszystkie podane w skrypcie argumenty i oddziela je przecinkiem. EDIT: No, prawie wszystkie. Ale Tymon, dlaczego 2 + a, zamiast po prostu w pętli podać a = 2 na początku? :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 12 Sierpnia 2009 Udostępnij Opublikowano 12 Sierpnia 2009 Ale Tymon, dlaczego 2 + a, zamiast po prostu w pętli podać a = 2 na początku?Who f**king cares? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 12 Sierpnia 2009 Udostępnij Opublikowano 12 Sierpnia 2009 A nie, zwracam honor, myślałem, że jest maksymalnie 13 argumentów a nie 15 :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Sierpnia 2009 Udostępnij Opublikowano 13 Sierpnia 2009 W sumie to jest ich 16, od argument0 do argument15 włącznie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TeoTN Opublikowano 13 Sierpnia 2009 Autor Udostępnij Opublikowano 13 Sierpnia 2009 No dobra, ale po skoro skrypt usuwa utworzony obiekt, to jak ma ponownie wywołać tą funkcję x sekund później? XD W efekcie "jakis_script" zostaje wywołany tylko jeden, jedyny raz ^^ Chyba, że ma zostać w jakiś specyficznym miejscu wywołana ta funkcja? EDIT: Lekko zmodyfikowałem i działa jak natura chciała: GML var o, c, a; // nowy obiekt o = object_add(); // dodaj kod create do obiektu object_event_add( o, ev_create, 0, 'alarm[0]=' + string( argument[1] ) + ';' ); // kod alarmu c = 'script_execute(' + string( argument[0] ) + ','; for( a = 0; a <= 13; a += 1 ) { if( is_string( argument[2 + a] ) ) c += '"' + string_replace( argument[2 + a], '"', '"+chr(34)+"' ) + '"'; else c += string( argument[2 + a] ); if( a != 13 ) c += ','; } c += ');script_timeout( jakis_script, room_speed * 5 );instance_destroy();object_delete(' + string( o ) + ');'; // dodaj kod alarmu do obiektu object_event_add( o, ev_alarm, 0, c ); // stworz obiekt instance_create( 0, 0, o ); Wiem, tam w tym ponownym wywołaniu można by dodać jeszcze wywołanie timeout'a z argumentami, ale na razie argumenty mi nie są potrzebne ^^ Dzięki Tymon za pomoc :) PS Sieroty niemyślące? ;> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Sierpnia 2009 Udostępnij Opublikowano 13 Sierpnia 2009 Jezu, nie tak! GML var o, c, a; // nowy obiekt o = object_add(); // dodaj kod create do obiektu object_event_add( o, ev_create, 0, 'alarm[0]=' + string( argument[1] ) + ';' ); // kod alarmu c = 'script_execute(' + string( argument[0] ) + ','; for( a = 0; a <= 13; a += 1 ) { if( is_string( argument[2 + a] ) ) c += '"' + string_replace( argument[2 + a], '"', '"+chr(34)+"' ) + '"'; else c += string( argument[2 + a] ); if( a != 13 ) c += ','; } c += ');alarm[0]=' + string( argument[1] ) + ';'; // dodaj kod alarmu do obiektu object_event_add( o, ev_alarm, 0, c ); // stworz obiekt instance_create( 0, 0, o ); return o; Stopowanie scripta jeszcze:GML // czy istnieje? if( !instance_exists( argument[0] ) || !object_exists( argument[0] ) ) return false; // niszcz instancje with( argument[0] ) instance_destroy(); // niszcz obiekt object_delete( argument[0] ); return true; Działa też z script_timeout, a teraz example:GML i = script_interval( script, 100000, 'i love gm!' ); script_stop( i ); :D 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ę