Hawaxi Opublikowano 22 Listopada 2014 Udostępnij Opublikowano 22 Listopada 2014 Witam, Mam 4 obiekty i chcę żeby zmieniały wygląd w zależności jaką liczbe wylosuje, wyglądy nie mogą się powtarzać... Mam to: GML global.liczba1 = irandom_range(1,4); if global.liczba1 = 1 { sprite_index = spr_1 } if global.liczba1 = 2 { sprite_index = spr_2 } if global.liczba1 = 3 { sprite_index = spr_3 } if global.liczba1 = 4 { sprite_index = spr_4 } pomoże ktoś? GameMaker:Studio Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 22 Listopada 2014 Udostępnij Opublikowano 22 Listopada 2014 Sprawdzaj czy liczba została wylosowana. Nie mam pomysłu na kod, więc tylko przedstawię jak to można zrobić. 1. Losuj liczbę 2. W pętli sprawdzaj czy została wylosowana (stwórz tablicę) 3. Jeśli liczba nie została wylosowana zapisz liczbę w tablicy i wyjdź z pętli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 23 Listopada 2014 Udostępnij Opublikowano 23 Listopada 2014 Albo po prostu zrób tak: 1.zapisz dane do ds_list. 2.wymieszaj ds_list 3.Odczytuj po kolei dane z niej W Twoim przypadku chciałbyś mieć obiekt który najpierw stworzy tę listę jako globalvar... GML //Tworzenie listy globalvar lista; lista = ds_list_create(); //Dodawanie danych do listy ds_list_add(lista,spr1,spr2,spr3,spr4); //Wymieszanie danych ds_list_shuffle(lista); ...a dopiero potem żeby te cztery obiekty wybierały z niej na zasadzie: GML //Wziecie wartosci sprite_index = ds_list_find_value(lista,0); //Usuniecie pozycji ds_list_delete(lista,0); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 Okej, mam tak: obj_control ktory tworzy liste, dodaje dane do listy i je miesza: GML globalvar lista; lista = ds_list_create(); ds_list_add(lista,spr_1); ds_list_add(lista,spr_2); ds_list_add(lista,spr_3); ds_list_add(lista,spr_4); ds_list_shuffle(lista); Później 4 objekty które wybierają i usuwają pozycje w tabeli: obj_1: GML sprite_index = ds_list_find_value(lista,0); ds_list_delete(lista,0); obj_2: GML sprite_index = ds_list_find_value(lista,1); ds_list_delete(lista,1); obj_3: GML sprite_index = ds_list_find_value(lista,2); ds_list_delete(lista,2); obj_4: GML sprite_index = ds_list_find_value(lista,3); ds_list_delete(lista,3); Wszystko elegancko ale powie mi ktoś dalczego wywala bład? : FATAL ERROR in action number 1 of Create Event for object obj_4: Push :: Execution Error - Variable Get -5.lista(100000, 0) at gml_Object_obj_4_Create_0 (line 1) - sprite_index = ds_list_find_value(lista,3); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 23 Listopada 2014 Udostępnij Opublikowano 23 Listopada 2014 Albo obj_4 pojawia się wcześniej niż obj_control (zobacz room->settings->Instance Order), albo coś pomieszałeś z tym globalem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 obj_control mam w oddzienlym pokoju który odpala się przed pokojem w którym jest obj_4. wie ktoś dlaczego w tym kodzie wyglądy się powtarzają? GML global.liczba1 = irandom_range(1,4); k = 0 k1 = 0 k2 = 0 k3 = 0 if global.liczba1 == 1 && k == 0 { sprite_index = spr_1 k++ } else randomize(); if global.liczba1 == 2 && k1 == 0 { sprite_index = spr_2 k1++ } else randomize(); if global.liczba1 == 3 && k2 == 0 { sprite_index = spr_3 k2++ } else randomize(); if global.liczba1 == 4 && k3 == 0 { sprite_index = spr_4 k3++ } else randomize(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 23 Listopada 2014 Filar Społeczności Udostępnij Opublikowano 23 Listopada 2014 powtarzają się dlatego, że zmieniasz sprite_index tylko obiektu, w którym jest ten kod. jak chcesz zmienić jakiś inny to musisz dać nazwa_obiektu.sprite_index Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 czyli? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 23 Listopada 2014 Filar Społeczności Udostępnij Opublikowano 23 Listopada 2014 to jest ta kontrolka, tak? po prostu przed "sprite_index" daj "x.", gdzie x to obiekt któremu chcesz zmienić sprite https://gmclan.org/?wiki=article&zm=11 edit: Jezu, dopiero teraz zobaczyłem o co chodzi w całym temacie, przeczytałem tylko ostatni post i nie zrozumiałem edit 2: no, ale z tym adresowaniem to trafiłem, zmień k, k1, k2 i k3 na global., żeby były dla każdego losującego obiektu takie same Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 kurcze, wciąż się powtarzają :/ kod jest w każdym z czterech obiektów może to sprawia że się powtarzają? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 23 Listopada 2014 Filar Społeczności Udostępnij Opublikowano 23 Listopada 2014 wszystkie k definiuj w create jednego obiektu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 teraz błąd: FATAL ERROR in action number 1 of Create Event for object obj_4: Push :: Execution Error - Variable Get -5.k(100001, 0) at gml_Object_obj_4_Create_0 (line 5) - if global.liczba1 == 1 && global.k == 0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 23 Listopada 2014 Filar Społeczności Udostępnij Opublikowano 23 Listopada 2014 create jednego obiektu GML global.k=0 global.k1=0 global.k2=0 global.k3=0 step jednego obiektu GML global.liczba1 = irandom_range(1,4); step wszystkich obiektów GML if global.liczba1 == 1 && global.k == 0 { sprite_index = spr_1 global.k++ } else if global.liczba1 == 2 && global.k1 == 0 { sprite_index = spr_2 global.k1++ } else if global.liczba1 == 3 && globalk2 == 0 { sprite_index = spr_3 global.k2++ } else if global.liczba1 == 4 && global.k3 == 0 { sprite_index = spr_4 global.k3++ } tu nie ma co się wysypywać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 23 Listopada 2014 Autor Udostępnij Opublikowano 23 Listopada 2014 Mam tak: obj_1 > create event: GML global.k=0 global.k1=0 global.k2=0 global.k3=0 obj_1 > step event: GML global.liczba1 = irandom_range(1,4); if global.liczba1 == 1 && global.k == 0 { sprite_index = spr_1 global.k++ } else if global.liczba1 == 2 && global.k1 == 0 { sprite_index = spr_2 global.k1++ } else if global.liczba1 == 3 && global.k2 == 0 { sprite_index = spr_3 global.k2++ } else if global.liczba1 == 4 && global.k3 == 0 { sprite_index = spr_4 global.k3++ } obj_2 obj_3 obj_4 > step event: GML if global.liczba1 == 1 && global.k == 0 { sprite_index = spr_1 global.k++ } else if global.liczba1 == 2 && global.k1 == 0 { sprite_index = spr_2 global.k1++ } else if global.liczba1 == 3 && global.k2 == 0 { sprite_index = spr_3 global.k2++ } else if global.liczba1 == 4 && global.k3 == 0 { sprite_index = spr_4 global.k3++ } obj_1 zmienił wygląd, pozostałe nie :P ma być step, begin step czy end step? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 25 Listopada 2014 Autor Udostępnij Opublikowano 25 Listopada 2014 Jeśli wszystkie obiekty wylosuja liczbe 1 to tylko wygląd jednego objektu się zmieni, trzeba dodać że jeśli już występiła ta liczba to pomieszaj i jeszcze raz losuj. Czyli tak jak poprzednio: GML if global.liczba1 == 1 && global.k == 0 { sprite_index = spr_1 global.k++ } else if global.liczba1 == 2 && global.k1 == 0 { sprite_index = spr_2 global.k1++ } else if global.liczba1 == 3 && global.k2 == 0 { sprite_index = spr_3 global.k2++ } else if global.liczba1 == 4 && global.k3 == 0 { sprite_index = spr_4 global.k3++ } plus: GML else if global.liczba1 == 1 && global.k1 == 1 { randomize(); } else if global.liczba1 == 2 && global.k2 == 1 { randomize(); } else if global.liczba1 == 3 && global.k3 == 1 { randomize(); } else if global.liczba1 == 4 && global.k4 == 1 { randomize(); } dobrze mysle? EDIT: i tak nie działa: FATAL ERROR in action number 1 of Step Event0 for object obj_3: Push :: Execution Error - Variable Get -5.k4(100005, 0) at gml_Object_obj_3_Step_0 (line 35) - else if global.liczba1 == 4 && global.k4 == 1 :crying: :crying: :crying: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
lenin Opublikowano 25 Listopada 2014 Udostępnij Opublikowano 25 Listopada 2014 bo w create z tego co podałeś nie inicjujesz zmiennej global.k4 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hawaxi Opublikowano 25 Listopada 2014 Autor Udostępnij Opublikowano 25 Listopada 2014 Nareszcie działa!!! Dziękuje wszystkim za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Malina Opublikowano 4 Grudnia 2014 Udostępnij Opublikowano 4 Grudnia 2014 Witam, ja również mam taki problem, przy czym kod jest w każdym z czterech obiektów i może to sprawia że się powtarzają? -------------------- Medpharm książki i podręczniki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 4 Grudnia 2014 Administratorzy Udostępnij Opublikowano 4 Grudnia 2014 Jeśli losują z globalnej i nie definiujesz w każdym na nowo zbioru, to nie powinno tak być - w innym wypadku tak będzie. 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ę