Skocz do zawartości

Dlaczego if, else, do until źle działa?


Platyna

Rekomendowane odpowiedzi

Mam takiego problema, że w jednym moim kodzie mimo że warunek if jest prawdziwy to GM i tak zawsze wykonuje else

Mój kolega mi powiedział że to jest spowodowane tym że GM wykonuje jeden kawałek kodu kilka razy, a ja miałem w tym kodzie w instrukcjach if coś takiego co powodowało że za drugim razem sprawdzania kodu if już nie miało prawdziwego warunku i dla tegio wykonują się instrukcje w bloku else i przezto wykonuje się i "if" i "else".

A więc żeby zapobiec temu że GM wykonuje każdy kod kilka razy zrobiłem pętlę do...until z zawsze fałszywym warunkiem żeby kod wykonał się tylko raz. No ale gdy gra zaczyna używać pętli "do until" z warunkiem fałszywym cały pecet mi się zawiesza.

Dlaczego tak się dzieje?????!!!!!!!!!!

HELP!!! Z góry dzięki... :(

Odnośnik do komentarza
Udostępnij na innych stronach

Kod wygląda troszke inaczej niż wyjaśniałem bo zamiast if użyłem switch ale problem ten sam tylko teraz zamiast else zawsze wykonuje się default czy problem dokładnie ten sam

 

switch(global.sejfik)

{

case(1):

global.sejfik=2 break;

 

case(4):

global.sejfik=5 break;

 

case(6):

instance_create(0,0,klapa) break;

 

default:

global.sejfik=0 break;

}

 

Czyli tak: POwiedzcie mi dlaczego instrukcje w deafult wykonują się zawsze mimo że warunek z któregoś wcześniejszego case jest prawdziwy??????????????????????

Odnośnik do komentarza
Udostępnij na innych stronach

Całkiem zjechana składnia.

switch (<expression>)
{
 case <expression1>: <statement1>; ...; break;
 case <expression2>: <statement2>; ...; break;
 ...
 default: <statement>; ...
}

Jesli zmienna glonal.sejfik jest jako expression a cyfry w nawiasach to wartość jaką ma ona przyjąć to kod powienien wyglądać tak:

switch (global.sejfik)
{
case 1: global.sejfik=2 break;
case 4: global.sejfik=5 break;
case 6: instance_create(0,0,klapa) break;
}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Hmm, a moim zdaniem, to tu brakuje średników, no i dla pewności można by zaokragalć globalną (bo nie wiem co ją generuje):

switch round(global.sejfik)
{
case 1: global.sejfik=2; break;
case 4: global.sejfik=5; break;
case 6: instance_create(0,0,klapa); break;
default: global.sejfik=0; break;
}

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Przykład gnyska jest w 100% dobry, widocznie global.sejfik był liczbą z miejscami po przecinku. W przykładzie jest pokazane zaokrąglenie w górę, w razie czego można też użyć zaokrąglenia w dół floor(variable);.

 

Jesteś w błędzie.

floor - zaokrągla w dół (5.2=5, 5.7=5);

ceil - zaokrągla w górę(5.2=6, 5.7=6);

round - zaokrągla w najbliższą stronę(5.2 =5, 5.7=6);

 

jeżeli do generowania zmiennej global.sejfik uzywasz random, to aby uzyskać zmienną całkowitą, uzywaj global.sejfik=round(random(10));

 

Sprawdź jakie wartosci przyjmuje liczba global.sejfik, dając np. w event On Key Press <Space>: show_message(string(global.sejfik));, wtedy dowiesz się czy trzeba zaokrąglać i poznasz przyczynę swojego błędu (ja często wykorszystuję ten sposób ).

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