ka21k Opublikowano 25 Czerwca 2011 Udostępnij Opublikowano 25 Czerwca 2011 Witam. Rozmyślałem właśnie nad tym jak napisać kod podobny do REPEAT, ale żeby powtarzał mi dany blok programu co jeden step. Wiadomo, że REPEAT czy pętla FOR wykonuje cały kod w jednym STEPie więc jeśli chciałbym żeby coś poruszyło się powiedzmy o 50 pikseli płynnie w prawo o jeden piksel co STEP to te funkcje nie zadziałają tak jak bym tego oczekiwał i przesuną obiekt o 50 pikseli za jednym zamachem. Jak rozpisać kod który zadziała jak REPEAT (to było by najbardziej funkcjonalne i proste w użyciu dla mnie)? Mam nadzieję, że temat nie okaże się zbyt trudny do rozgryzienia i macie jakieś pomysły na jego rozwiązanie. Pozdrawiam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 25 Czerwca 2011 Udostępnij Opublikowano 25 Czerwca 2011 GML //create a=0; //step if(a<=50) { a+=1; x+=1; } O to Ci chodziło? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ka21k Opublikowano 25 Czerwca 2011 Autor Udostępnij Opublikowano 25 Czerwca 2011 Tak. To rozwiązanie było by dobre tylko dla jednej czynności, ale co gdybym zechciał zrobić sekwencje ruchów obiektów? Można by za każdym razem inicjować zmienną "a", ale wtedy ten IF wykonywał by się także. Za drugiej strony mógłbym napisać kilkadziesiąt IFów dla poszczególnych obiektów tylko ile wtedy potrzebowałbym zmiennych? To stało by się niepraktyczne jeśli zechciałbym sterować w ten sposób kilkoma obiektami na raz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 25 Czerwca 2011 Udostępnij Opublikowano 25 Czerwca 2011 Jeśli chcesz zrobić sekwencje ruchów, skorzystaj z "timelines". W dokumentacji sporo o nich znajdziesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ka21k Opublikowano 28 Czerwca 2011 Autor Udostępnij Opublikowano 28 Czerwca 2011 Poczytalem troche o tych Timelines i tak czy inaczej musialbym kozystac z instrukcji warunkowych zeby rozdzielic wykonywanie kodu do pojedynczych STEPow. Samo umieszczenie kodu w sekwencji timelines spowoduje tylko wykonanie go w odpowiednim czasie, ale nadal stanie sie to wszystko w jednej klatce. Musialbym napisac jakis skrypt np: REPEAT_STEP (ilosc wykonan) {instrukcje}; ktorym wykonywalby sie raz na STEP w programie az ilosc wykonan osiagnela by 0. Jak to zrobic? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 A gdzie tam, timelines działa tak samo jak image_index/speed. Co step wykonywany jest kod z jednego punktu na osi timelinów (w domyślnych warunkach, tj timeline_speed = 1). Twoim zadaniem jest tylko odpowiednia inicjalizacja osi. Nie wiem natomiast, czy timeliny są robione po wykonaniu step, czy przed. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 28 Czerwca 2011 Administratorzy Udostępnij Opublikowano 28 Czerwca 2011 No jeśli chcesz aby coś wykonywało się co step, ale tylko kilka razy, to jedyną opcją jest uzycie drugiej zmiennej do zliczania. Ew alarmu, ale na jedno wychodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ka21k Opublikowano 28 Czerwca 2011 Autor Udostępnij Opublikowano 28 Czerwca 2011 A gdzie tam, timelines działa tak samo jak image_index/speed. Co step wykonywany jest kod z jednego punktu na osi timelinów (w domyślnych warunkach, tj timeline_speed = 1). Twoim zadaniem jest tylko odpowiednia inicjalizacja osi. Nie wiem natomiast, czy timeliny są robione po wykonaniu step, czy przed. Jak sam napisales jeden punkt z Timeline na jedna klatke wiec wracamy do punktu wyjscia. Pisac 50 punktow w Timeline z tym samym kodem chyba raczej bez sensu, a za drugiej strony mozna by wywolac 50 razy ten sam punkt w Timeline, ale do tego juz potrzeba osobnej instrukcji IF i zmiennej do zliczania tych wywolan. Wiec nadal stoimy w tym samym miejscu. Zastanawialem sie czy nie mozna by bylo napisac jakiegos dll z taka funkcja? Tym czasem pozostaje kombinowac inaczej. Swoja droga mogliby dodac taka funkcje w nastepnych odslonach GM. Co wy na to? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 GML switch(image_index){ 0: //akcja1 break; 1: //akcja2 break; 2: //akcja3 break; 3: //akcja4 break; 4: //akcja5 break; 5: //akcja6 break; } kazda kolejna akcja wykona sie co step, aby cos wykonalo sie kilka razy dodaj sobie zmienna pomocnicza i zatrzymaj klatke przez jakis czas i pusc dalej, np. GML [...] break; 54: if(a<30){ a+=1; image_index=54; //akcja } break; 55: [...] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 Pierwszy skrypt nazwij action_system() i wywołaj go w Create: GML global.tab[0] = 0 global.scr[0] = '' global.nr = 0 for(i = 0; i < 256; i += 1) { global.tab = 0; global.scr[0] = '' } Drugi skrypt nazwij action_add(xtimes,gml), gdzie xtimes to liczba, ile razy ma być powtórzony w ciągu gry skrypt, a gml to ten kawałek kodu, który ma być wywoływany xtimes razy. Dajesz najlepiej tuż po action_system(): GML global.tab[global.nr] = argument0 global.scr[global.nr] = argument1 global.nr += 1 Ostatni skrypt to action_perform(), który wywoła wszystkie akcje, które dodałeś funkcją action_add(xtimes,gml), daj to w Step, ale TYLKO jednego obiektu na mapie, tj. ma być wywoływany tylko raz na step: GML for(i = 0; i < global.nr; i += 1) { if(global.tab > 0) {global.tab -= 1; execute_string(global.scr)} } Niech ktoś dorobi do tego przykład, bo mi się nie chce :] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 @muczek: troche przekombinowales... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 Ale działa i nie ogranicza się tylko do jego projektu. Poza tym, jak ktoś nie potrafi sprecyzować dokładnie problemu, to wtedy takie coś się dzieje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 28 Czerwca 2011 Udostępnij Opublikowano 28 Czerwca 2011 @ka21k Przecież odpowiedź na to co mówisz masz w drugim poście tematu. Tylko zamiast a dajesz swój kod. Może to być nawet 100 linii, jak w klamrze to spokojnie zadziała, wymagany jest tylko ustawiony licznik. 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ę