Skocz do zawartości

Nietypowa pauza


TeoTN

Rekomendowane odpowiedzi

GM bez dodatku nie posiada wielowątkowości

Odnośnik do komentarza
Udostępnij na innych stronach

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

[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

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

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

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

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

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

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

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

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

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

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ę...