Skocz do zawartości

switch, czy if else?


Paqoo

Rekomendowane odpowiedzi

Mam taki kod w stepie:

switch (surowiec)
{
case (surowiec<surowiec/2): sprite_index=sprite88; break;
case (surowiec<surowiec/10): sprite_index=choose(sprite89,sprite90,sprite91) break;
case (surowiec < 1):instance_destroy();break;
default:;
}

 

Ale z jakiegoś powodu nie działa! 1 warunek jest poprawny, a dalej nie zmienia grafiki... O co chodzi?

Odnośnik do komentarza
Udostępnij na innych stronach

w switch, case sluzy do pobierania gotowych wartosci. Chodzi o to ze tam powinienes wstawic zmienne lub wartosci, nie zas warunki logiczne.

Bo tutaj w case(surowiec<surowiec/2) sprawdza czy surowiec<surowiec/2 i jesli tak to zwraca true, jak nie to false, a ze wszedzie masz warunki logiczne to masz 2 mozliwosci pobieranych danych: true lub false. do tego lepiej juz uzyj warunek if, jesli ma to tak wygladac.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam coś takiego:

if (surowiec<surowiec/2){sprite_index=sprite88;}
else if (surowiec<surowiec/10){sprite_index=sprite89;image_index=choose(0, 1, 2);}
else if (surowiec < 1){instance_destroy();}

 

I znowu nie działa!

Odnośnik do komentarza
Udostępnij na innych stronach

czym jest zmienna surowiec i do czego służy w Twojej grze?

btw. spróbuj zrobic tak jak pablo napisal

Odnośnik do komentarza
Udostępnij na innych stronach

Zmienna surowiec to jakby ilość surowca w jednej rudzie. Wydobywamy go i ruda się pomniejsza (zmienia grafikę).

Nie wiem o co chodzi Pablo :P

 

Szczególnie tutaj

np. surowiec div 10 i co 10 mniej masz inną klatkę.
Odnośnik do komentarza
Udostępnij na innych stronach

Jak surowiec ma być mniejszy niż surowiec podzielony przez 2 lub 10? :huh:

 

Do tego musiałby mieć wartości ujemne. Ale jakoś wydaje mi się, że raczej (jak wszędzie) surowce liczy się od zera w górę i chodziło Ci o coś innego. Prawdopodobnie powinieneś mieć oddzielną zmienną przechowującą maksymalną wartość surowca i to z nią porównywać aktualny stan.

Odnośnik do komentarza
Udostępnij na innych stronach

Surowiec ma wartość początkową round(random(50)). To chyba nic dziwnego ten kod? Surowiec mniejszy od 1/10 surowca. Mają sens. Jak inaczej pokażesz procent? Wyobraź sobie wartość surowca 50 co ma być mniejsze od 5. Przecież jest to możliwe.

Odnośnik do komentarza
Udostępnij na innych stronach

Słuchaj, pomyśl. Jak pizza może być mniejsza od połowy pizzy?! :/

Te warunki nie mają sensu bo to po prostu sprawdzanie czy zmienna jest ujemna jakąs zwaloną metodą.

Raczej nie o to ci chodziło.

 

Opisz nam dokładnie co chcesz osiągnąć.

Odnośnik do komentarza
Udostępnij na innych stronach

surowiec/2 - co w tym złego np?

Po prostu połowa wartości zmiennej surowiec. Możliwe, że źle to sobie pomyślałem? To jak inaczej zaznaczyć... Po prostu podać wartość np. surowiec<round(random(50))/10? Jaka to różnica.

 

 

Chce osiągnąć to, że:

losuje mi surowiec do 50

 

- jeśli wartość wyniesie połowę to zmień grafikę na x

- jeśli wartość wyniesie 1/10 to wybierz obrazek ze sprita y (są 3 klatki)

Odnośnik do komentarza
Udostępnij na innych stronach

Nadal nie wiem o co ci chodzi ale postaram ci przybliżyć o co mi chodzi.

Zakładając że surowiec jest równy 5

wtedy masz

if(5<5/2)

czyli

if(5<2.5)

Jaki to ma sens?

Ten warunek jest prawdziwy jedynie dla liczb ujemnych

np. if(-5<-2.5)

 

KPW?

 

EDIT:

W takim razie musisz stworzyć dodatkową zmienną.

Jedna z wylosowaną wartością a druga z to ten surowiec i je ze sobą porównywać

Odnośnik do komentarza
Udostępnij na innych stronach

Argh... jak możesz porównywać wartość z samą sobą? Skąd program ma wiedzieć, że chodzi Ci o wartośc początkową?

 

W create:

 

surowiec=round(random(50));

surowiec_max=surowiec;

 

I normalnie już w step:

 

if (surowiec<surowiec_max/2){sprite_index=sprite88;}

else if (surowiec<surowiec_max/10){sprite_index=sprite89;image_index=choose(0, 1, 2);}

else if (surowiec < 1){instance_destroy();}

Odnośnik do komentarza
Udostępnij na innych stronach

TeeGee o to chodziło.

 

Ale tu chyba jest coś nie tak:

else if (surowiec<surowiec_max/10){sprite_index=sprite89;image_index=choose(0, 1, 2);}

 

Bo ciągle nie wybiera tych klatek! ;(

 

Aha już widzę :D Chyba image_number nie index... LOL! :D Głośno.

 

I dalej nie działa... GM chyba mnie nie lubi :/

Odnośnik do komentarza
Udostępnij na innych stronach

if (surowiec<surowiec_max/2){sprite_index=sprite88;}

if (surowiec<surowiec_max/10){sprite_index=sprite89;image_index=choose(0, 1, 2);}

else if (surowiec < 1){instance_destroy();}

 

Tak będzie dobrze. Wywaliłem else bo ostatecznie wartość/10 zawsze będzie mniejsza niż wartość/2, a elsesprawia, że drugi warunek jest sprawdzany tylko jeśli pierwszy był nieprawdziwy.

Odnośnik do komentarza
Udostępnij na innych stronach

To cudownie :P Już prawie działa. Tylko przy zamianie na te najmniejsze rudki to już fixuje.

 

sprite_index=sprite89;image_index=choose(0,1,2);change=true;

Jakoś nie za bardzo wie, że po zamianie na innego sprita ma losować jego klatki...

Odnośnik do komentarza
Udostępnij na innych stronach

Przeglądając przykład pabla, ja bym to zrobił jeszcze inaczej ;)

W Create dodać zmienną

GML
resourcemax=100;

W Draw rysowanie sprita i paska życia

GML
draw_sprite(sprite_index,resource div (resourcemax/image_number),x,y);

draw_rectangle(x-50,y-62,x-50+((resource/resourcemax)*100),y-50,0);

;p
Odnośnik do komentarza
Udostępnij na innych stronach

@pablo1517, ja to dopisałem do twojego przykładu, i w tym sęk że wystarczy dodać zmienną i podmienić rysowanie sprita i zielonego paska. :3 A do tego niezależnie ile będzie klatek w spricie, "zawsze" pokażą się wszystkie ( Chyba że przyśpieszysz zbieranie ) klatki ;p

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