Exigo Opublikowano 12 Stycznia 2009 Opublikowano 12 Stycznia 2009 Więc tak... czemu nie działają "ekspresje"? w pętli switch?... przykładowo: switch (keyboard_key) { case vk_left || vk_right: x -= 5; break; case vk_up|| vk_down: x += 5; break; } Hm?
Marek.S Opublikowano 12 Stycznia 2009 Opublikowano 12 Stycznia 2009 to się nazywa "operatory". robi się case vk_left: case vk_right: //akcja break;
Exigo Opublikowano 12 Stycznia 2009 Autor Opublikowano 12 Stycznia 2009 Ok.. rozumiem że tylko i wyłącznie jest rozwiązanie na tzw. " || "?.. Co zrobić jeśli chcę użyć innych operatorów?
Uzjel Opublikowano 12 Stycznia 2009 Opublikowano 12 Stycznia 2009 tak chyba łączyć nie możesz. zrób po dwa i już.
Pental Stary Opublikowano 13 Stycznia 2009 Opublikowano 13 Stycznia 2009 Od tego jest instrukcja warunkowa if, ot co. Switcha używamy tylko wtedy, gdy idealnie nam odpowiada. Wszelkie kombinacje są dla mnie bez sensu...
Pieter Opublikowano 14 Stycznia 2009 Opublikowano 14 Stycznia 2009 GML switch (keyboard_key) { case vk_left: case vk_right: x -= 5; break; case vk_up: case vk_down: x += 5; break; }
Exigo Opublikowano 14 Stycznia 2009 Autor Opublikowano 14 Stycznia 2009 Już ktoś zarzucił podobny kod... ale i tak wszystko się mija z celem bo mi potrzebne jest tylko i wyłącznie "&&" - w switchu rzecz jasna. Zresztą, problem jest "rozwiązany"... oczywiście w if'ach. Zapewne wiadomo ile linijek zajął mi ten kod. @Pental: Gdy by się udało rozwiązać ten problem, switch by pasował jak tralala.
Pental Stary Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 A jakie znaczenie linijki mają, skoro znak nowej linii to tzw. biały znak? Czyli spacje też liczysz :) ? Mówię, switch polecam używać do konkretnych wartości, najlepiej liczb, tak jest najprościej. Jeśli chcesz używać operatorów logicznych, to używaj ifa. A, i mam pytanie, jak dużo tych porównań było? (chodzi mi o to, ile operatorów tych użyłeś użyłeś) Jeśli to już taki problem, to napisz funkcję do i wsadź kod: // argument 0 - warunek 1 // argument 1 - warunek 2 // argument 2 - kod, jesli sie warunki spelnia operator = '||'; str = 'if ( '; str += argument[ 0 ] + ' ' + operator + argument[ 1 ] + ' ) ' + argument[ 2 ]; execute_code( str ); A używasz tak: do( <warunek1>, <warunek2>, <kod, jesli obydwa warunki polaczone operatorem || zwracaja prawde> )
Dawidds Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Pental - ty wiesz, że to będzie z 10x mneij wydajne, niż po prostu na elseif-ach...? Wygoda to nie wszystko...
Pental Stary Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Oj, mylisz się, lubisz rozpoczynać flamewar, ale nie potrafisz go zakończyć... Nie pisz głupot, jaka wygoda? I jaka wydajność? Nudzi ci się w życiu, to łap łopatę i odśnieżaj podwórka sąsiadów...
Pental Stary Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Wiem o tym, ale jeśli Kuba twierdzi, że to taki problem, to dałem mu przykład, jak może sobie sam to zaimplementować, choć to i tak w użyciu wygląda fatalnie, może mu się spodoba...
Dawidds Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Jeny, po prostu daję Kubie radę, iż to jest na dłuższą metę niewydajne - jakby tego nie wiedział. Niech sobie chłopka przeanalizuje plusy i minusy i sam stwierdzi, czy warto tego używać. Ty wskazałeś plusy (1 - wygoda), ja musiałem wskazać minus (też jeden - wydajność (choć to akurat wina GM'a)). Ja nie lubię rozpoczynać "flamewarów" - to wy lubicie je znajdować w moich postach... :) PS: Tymon, fajny opis :P
Pental Stary Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Hmm... Ale jakby się przyjrzeć, to są to zwykłe if'y, co najwyżej można się wolnego execute_string czepić, niczego więcej...
Administratorzy gnysek Opublikowano 15 Stycznia 2009 Administratorzy Opublikowano 15 Stycznia 2009 a co za problem połączyć switch z if ? GML switch moj_warunek { case 1: if warunek==2 { <costam> }; break; case 3: if warunek==4 { <costam> }; break; } lub jeżeli case może się powtarzać: GML switch moj_warunek { case 1: if warunek==2 { <costam>; break; } case 1: if warunek==3 { <costam>; break; } case 1: if warunek==4 { <costam> break; } /* Tak samo w sumie było by: case 1: if warunek==2 { <costam>; } else if warunek==3 { <costam>;} else if warunek==4 { costam> } break; */ } Bo przypominam, że to BREAK powoduje zakończenie sprawdzania warunków switch, więc jezeli nie wejdziemy w klamerki, to sprawdzi następne :)
Tymon Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 Jedyny problem w tym, że jak ma używać switch tylko dla 2 warunków to lepiej użyć po prostu ifów.
Pental Stary Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 ..I na tym kończymy zbędną dyskusję :) .
Marek.S Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 GML switch moj_warunek { case 1: switch( warunek ) { case 1: /*akcja1*/;break case 2: /*akcja2*/;break case 3: /*akcja3*/;break } break case 2: . . . } :D.
Tymon Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 I co? Będziesz zagnieżdżał w sobie kilka switchów tylko po to by sprawdzić czy 2 klawisze są naciśnięte?
Marek.S Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 nie, ale skoro wpadłem na pomysł to napisałem. może tu akurat nie, ale pewno gdzieś może to być użyteczne ;)
Administratorzy gnysek Opublikowano 15 Stycznia 2009 Administratorzy Opublikowano 15 Stycznia 2009 No wiesz, jak on to chce zrobić dla czterech klawiszy... to nie wiem o co cały płacz :P Co innego, gdyby robił dla stu xD Wtedy trzeba poszukać szybszego zapisu.
Marek.S Opublikowano 15 Stycznia 2009 Opublikowano 15 Stycznia 2009 taką obsługę dla 100 to by chyba z rok pisał...
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ę