odex Opublikowano 20 Października 2018 Udostępnij Opublikowano 20 Października 2018 Cześć, sprawdzałem w historii, jednak nie znalazłem rozwiązania mojego problemu stąd też ten post. Powiedzmy, że tworzę grę opierającą się głównie na "losowo" generowanych numerach, coś np w stylu binding of isaac. Chciałbym użyć wbudowanej wbudowanej funkcji seedów w GM, tak by ewentualnie potem wrócić do wcześniej wygenerowanego scenariusza. Problem jest tylko taki, że po użyciu funkcji random_set_seed finalny rezultat nie zawsze jest taki sam, przykład: Oto pierwszym pokój gry, te kolorowe ikonki to powerupy, które są generowane ze zniszczonych skrzyń, jak widać na poniższych screenach mimo, że seed jest taki sam to przedmioty się różnią. Dodatkowo w prawym dolnym roku gra tworzy meteo o nieco innym kolorze. Ten meteor jest generowany losowo i zawsze jest w tym samym miejscu przy tym seedzie - to więc działa prawidłowo. W kodzie ani razu nie jest użyta funkcja randomize(). Wiem, że na wyniki generowania, nawet przy tym samym seedzie, wpływa to co robiliśmy wcześniej (różne działania prowadzą do różnych rezultatów). Problem jest taki, że jest to dosłownie pierwszy ekran i jedyne co zrobiłem to zniszczenie skrzyń zawierających te powerupy (zawsze w tej samej kolejności). Z góry dziękuję każdemu za pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 20 Października 2018 Udostępnij Opublikowano 20 Października 2018 Kurczę, powinno działać. Po samych screenach trudno coś powiedzieć. W którym miejscu w kodzie ustawiasz seeda? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 20 Października 2018 Autor Udostępnij Opublikowano 20 Października 2018 W create obiektu, który jest pierwszą instancją tworzoną w roomie (sprawdziłem dwa razy). random_set_seed(130); To jest dosłownie cały kod. Wszystkie te meteoryty mają losowane ustawiany image_angle - to też działa prawidłowo, tylko powerupy są różne. Poniżej skrypt generujący obiekt po zniszczeniu 'skrzyni': ///scr_item_generator(x, y) var xx = argument[0]; var yy = argument[1]; var listsize = ds_list_size(global.itemlist)-1; var los = irandom(listsize); var obj = ds_list_find_value(global.itemlist, los); instance_create(xx, yy, obj); ds_list_delete(global.itemlist, los); Jak widać też nie ma tutaj nic specjalnie dziwnego, stąd też moje zakłopotanie, gdyż powinno działać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 sprawdź get_seedem w konsoli przed użyciem randoma w obiektach gdzie się źle losuje czy aby na pewno te obiekty losują z poprawnego seeda. Jak mają za każdym razem ten sam seed a mimo to źle działają to coś faktycznie dziwnego się stało i może to być wina GMa ale jeżeli ma różny seed to widocznie ręczne ustawienie zadziałało zbyt późno? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 22 Października 2018 Autor Udostępnij Opublikowano 22 Października 2018 Sprawdziłem i show_debug_message zawsze zwraca właściwego seeda. To nie jest też tak, że te powerupy są generowane całkowicie losowo, po paru próbach jestem w stanie odwzorować oryginalny stan, czasami jest jeden różny, czasami dwa, czasami wszystkie. Tak jakby seed zawężał mocno pole wyboru, jednak dalej pozwalał na małe przetasowania. Czy to możliwe, że ds_list jest tutaj problemem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 hmm no dobra a sprawdź jeszcze funkcje random() co zwracają za każdym razem, czy zwracają zawsze tą samą liczbę? Bo teraz jeżeli randomy będą zawsze losować tą samą liczbę a mimo to twoje itemki będą inne, to wtedy problemem nie jest losowość a coś innego Może przed var los = irandom(listsize); wstaw show_debug_message(irandom(100)) dla przykładu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 22 Października 2018 Autor Udostępnij Opublikowano 22 Października 2018 Nie wiem czy dobrze zrozumiałem 'oddzielić od listy', zrobiłem po prostu tak: var listsize = ds_list_size(global.itemlist)-1; show_debug_message(string(random_get_seed())); var los = irandom(listsize); show_debug_message(los); var obj = ds_list_find_value(global.itemlist, los); instance_create(xx, yy, obj); ds_list_delete(global.itemlist, los); Efekt: 130 130 130 130 130 130 101 101 101 101 25 101 130 130 130 130 130 130 57 17 17 17 29 29 130 130 130 130 130 130 66 13 13 13 13 82 Pierwsza liczba to seed, liczba poniżej to rezultat (po 3 na próbę). Jak widać 3 razy pod rząd wygenerowało to samo (i faktycznie było to samo), jednak dalej są różne odchyły. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 Chodziło mi o czysty test randoma niezależny od rozmiaru listy Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 22 Października 2018 Autor Udostępnij Opublikowano 22 Października 2018 Wybacz, teraz dopiero zauważyłem Twojego edita przy poprzednim poście. Zrobiłem jak pisałeś i dalej się rozjeżdża: 130 130 130 130 130 130 5 5 5 5 5 5 130 130 130 130 130 130 33 2 33 27 27 33 130 130 130 130 130 130 96 96 81 81 81 88 Aczkolwiek np zawsze pierwsza liczba to 5 i zawsze też przedmiot wylosowany był ten sam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 A jakbyś dał jeden randomize() na starcie gry zaraz po ustaleniu swojego seeda? Możesz jeszcze zobaczyć inną rzecz, co się stanie jak skompilujesz grę do exe, czy tam też random będzie źle działał Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 22 Października 2018 Autor Udostępnij Opublikowano 22 Października 2018 Randomize robi dokładnie to co powinien - przegenrowuje seed na losowy i wszystko zawsze jest inne zgodnie z założeniami. Skompilowałem grę i mam wrażenie, że rozstrzał jest jeszcze większy, na pewno nie działa jak powinno. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 Aha bo finalna gra zawsze ma randomize na starcie w exe a run i debugger ma stały seed do testów i trzeba randomować ręcznie Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 22 Października 2018 Udostępnij Opublikowano 22 Października 2018 A spróbuj wywalić var przed los = irandom(listsize); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 23 Października 2018 Autor Udostępnij Opublikowano 23 Października 2018 7 godzin temu, Uzjel napisał: A spróbuj wywalić var przed los = irandom(listsize); Niestety, dalej to samo. Coś czuje, że problem leży po stronie samego GMSa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Października 2018 Udostępnij Opublikowano 23 Października 2018 Bardzo ciekawy problem, może coś zrypali w tej łatce ostatecznej? Sprawdzę czy mój generator też ma ten problem ze stałym seedem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 23 Października 2018 Udostępnij Opublikowano 23 Października 2018 Może to to https://bugs.yoyogames.com/view.php?id=29853 ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Października 2018 Udostępnij Opublikowano 23 Października 2018 No dobra czyli oni już tego nie naprawią skoro to występuje w 9999? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 23 Października 2018 Autor Udostępnij Opublikowano 23 Października 2018 4 godziny temu, Uzjel napisał: Może to to https://bugs.yoyogames.com/view.php?id=29853 ? Raczej nie bo wedle opisu problem się pojawia przy restarcie roomu. U mnie problem problem występuje nawet jak zrestartuje całą grę (puszczę kompilator ponownie). EDIT: Panowie, chyba mamy przełom. Dodałem do oryginalne skryptu generującego przedmiot jeszcze raz random_set_seed i... działa, ani razu nie dostałem innego rezultatu niż oryginalny, nawet gdy otwieram skrzynie w innej kolejności. Teraz moje pytanie - dlaczego? Tym bardziej, że wcześniej jak sprawdzałem w skrypcie to cały czas pobierało z właściwego seeda. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Października 2018 Udostępnij Opublikowano 23 Października 2018 jeszcze raz to znaczy jeden po drugim? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 24 Października 2018 Autor Udostępnij Opublikowano 24 Października 2018 Nie, po prostu coś takiego: ///scr_item_generator(x, y) var xx = argument[0]; var yy = argument[1]; random_set_seed(seed); //TO DOPISAŁEM var listsize = ds_list_size(global.itemlist)-1; var los = irandom(listsize); var obj = ds_list_find_value(global.itemlist, los); instance_create(xx, yy, obj); ds_list_delete(global.itemlist, los); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Października 2018 Udostępnij Opublikowano 24 Października 2018 Ten bug nie został naprawiony Mike się wypowiedział, przez przypadek usunęli fixa którego przygotowali 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ę