Skocz do zawartości

problem z dodawaniem losowych obiektów


Rekomendowane odpowiedzi

Witam,

 

w "create" obiektu, który mam rozłożony na planszy równomiernie, mam taki kod:

 

if(irandom_range(1, 6) == 1){

instance_create(x, y, obj_kula_czerwony);

}

 

if(irandom_range(1, 6) == 2){

instance_create(x, y, obj_kula_niebieski);

}

 

if(irandom_range(1, 6) == 3){

instance_create(x, y, obj_kula_zielony);

}

 

if(irandom_range(1, 6) == 4){

instance_create(x, y, obj_kula_zolty);

}

 

if(irandom_range(1, 6) == 5){

instance_create(x, y, obj_kula_fioletowy);

}

 

if(irandom_range(1, 6) == 6){

instance_create(x, y, obj_kula_seledynowy);

}

 

 

który ma powodować, że w środku każdego obiektu pojawi się losowo wybrana kulka. Wszystko niby działa, ale kulki nie pojawiają się we wszystkich miejscach. Losowe miejsca zostają wolne. Co to może być? Dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Zacznij używać [ gml ] do oznaczania kodu żeby był czytelniejszy. Poza tym twój kod jest bardzo feralny bo może wygenerować wszystkie 6 obiektów w jednym miejscu, bo random za każdym razem da nową liczbę. Zapisuj wylosowaną wartość do zmiennej i wtedy sprawdzaj, a najlepiej korzystaj w takich wypadkach z funkcji choose()

GML
r=choose(1,2,3,4,5,6);

 

if(r == 1){

instance_create(x, y, obj_kula_czerwony);

}

Odnośnik do komentarza
Udostępnij na innych stronach

Zacznij używać [ gml ] do oznaczania kodu żeby był czytelniejszy. Poza tym twój kod jest bardzo feralny bo może wygenerować wszystkie 6 obiektów w jednym miejscu, bo random za każdym razem da nową liczbę. Zapisuj wylosowaną wartość do zmiennej i wtedy sprawdzaj, a najlepiej korzystaj w takich wypadkach z funkcji choose()

GMLr=choose(1,2,3,4,5,6);

 

if(r == 1){

instance_create(x, y, obj_kula_czerwony);

}

 

Działa z "choose". Super, dzięki bardzo.

Odnośnik do komentarza
Udostępnij na innych stronach

Zapoznaj się przy okazji ze strukturą switch.

Warto też zastanowić się, czy te kulki mają inne właściwości?

Jeżeli nie, to można użyć jednego obiektu.

 

GML
r = irandom_range(1,6)

obj = -1

 

switch(r)

{

case 1: obj_kula_czerwony break;

case 2: obj_kula_niebieski break;

case 3: obj_kula_zielony break;

...

}

 

instance_create(x,y,obj);

Odnośnik do komentarza
Udostępnij na innych stronach

1, nietylko zrozum switch ale tez if/else if/else

w pierwszym postu losujesz jesli ma byc czervwona a potem niebieska etc.

naprzyklad: jesli vylosujesz czerwono to jest szansa, ze drugi los znow wylosuje zamiast czerwonej niebiesko.

a TO doprowadza to do nierownego losowania kolorow, bo jest wieksza szansa na kolory pozniej losowane

 

prawidlowo IF majo byc:

GML
if(irandom_range(1, 6) == 1){

instance_create(x, y, obj_kula_czerwony);

}

 

else if(irandom_range(1, 6) == 2){

instance_create(x, y, obj_kula_niebieski);

}

 

else if(irandom_range(1, 6) == 3){

instance_create(x, y, obj_kula_zielony);

}

 

else if(irandom_range(1, 6) == 4){

instance_create(x, y, obj_kula_zolty);

}

 

else if(irandom_range(1, 6) == 5){

instance_create(x, y, obj_kula_fioletowy);

}

 

else { // by zawsze byl jakis kolor. inaczej kulka niepojawi sie, bo zadna niebyla wylosowana :)

instance_create(x, y, obj_kula_seledynowy);

}

to tylko ilustracyjny przyklad, jak uzyc if/else is/else a nie jak powinno sie programowac!

 

 

2, lepszy kod od Threef mozna uproscic do:

GML
instance_create(x, y, choose( obj_kula_czerwony, obj_kula_niebieski, obj_kula_zielony, obj_kula_zolty, obj_kula_fioletowy, obj_kula_seledynowy);
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ę...