kriso99 Opublikowano 11 Lipca 2013 Udostępnij Opublikowano 11 Lipca 2013 Nie mam już z tym siły, proszę Was o ogarnięcie tego(wiem gorzej tego napisać nie mogłem): GML switch(walk) { case 1://a if !place_meeting(x+lengthdir_x(1,180),y+lengthdir_y(1,180),obj_solid) x-=1 break case 2://w if !place_meeting(x+lengthdir_x(1,90),y+lengthdir_y(1,90),obj_solid)y-=1 break case 3://s if !place_meeting(x+lengthdir_x(1,270),y+lengthdir_y(1,270),obj_solid)y+=1 break case 4://d if !place_meeting(x+lengthdir_x(1,0),y+lengthdir_y(1,0),obj_solid)x+=1 break case 5://a if !place_meeting(x+lengthdir_x(2,180),y+lengthdir_y(2,180),obj_solid)x-=2 break case 6://w if !place_meeting(x+lengthdir_x(2,90),y+lengthdir_y(2,90),obj_solid)y-=2 break case 7://s if !place_meeting(x+lengthdir_x(2,270),y+lengthdir_y(2,270),obj_solid)y+=2 break case 8://d if !place_meeting(x+lengthdir_x(2,0),y+lengthdir_y(2,0),obj_solid)x+=2 break case 9://a if !place_meeting(x+lengthdir_x(3,180),y+lengthdir_y(3,180),obj_solid)x-=3 break case 10://w if !place_meeting(x+lengthdir_x(3,90),y+lengthdir_y(3,90),obj_solid)y-=3 break case 11://s if !place_meeting(x+lengthdir_x(3,270),y+lengthdir_y(3,270),obj_solid)y+=3 break case 12://d if !place_meeting(x+lengthdir_x(3,0),y+lengthdir_y(3,0),obj_solid)x+=3 break case 13://AW if !place_meeting(x+lengthdir_x(1,135),y+lengthdir_y(1,135),obj_solid) { x+=lengthdir_x(1,135) y+=lengthdir_y(1,135) } break case 14://WD if !place_meeting(x+lengthdir_x(1,45),y+lengthdir_y(1,45),obj_solid) { x+=lengthdir_x(1,45) y+=lengthdir_y(1,45) } break case 15://DS if !place_meeting(x+lengthdir_x(1,315),y+lengthdir_y(1,315),obj_solid) { x+=lengthdir_x(1,315) y+=lengthdir_y(1,315) } break case 16://SA if !place_meeting(x+lengthdir_x(1,225),y+lengthdir_y(1,225),obj_solid) { x+=lengthdir_x(1,225) y+=lengthdir_y(1,225) } break case 17://AW if !place_meeting(x+lengthdir_x(2,135),y+lengthdir_y(2,135),obj_solid) { x+=lengthdir_x(2,135) y+=lengthdir_y(2,135) } break case 18://WD if !place_meeting(x+lengthdir_x(2,45),y+lengthdir_y(2,45),obj_solid) { x+=lengthdir_x(2,45) y+=lengthdir_y(2,45) } break case 19://DS if !place_meeting(x+lengthdir_x(2,315),y+lengthdir_y(2,315),obj_solid) { x+=lengthdir_x(2,315) y+=lengthdir_y(2,315) } break case 20://SA if !place_meeting(x+lengthdir_x(2,225),y+lengthdir_y(2,225),obj_solid) { x+=lengthdir_x(2,225) y+=lengthdir_y(2,225) } break case 21://AW if !place_meeting(x+lengthdir_x(3,135),y+lengthdir_y(3,135),obj_solid) { x+=lengthdir_x(3,135) y+=lengthdir_y(3,135) } break case 22://WD if !place_meeting(x+lengthdir_x(3,45),y+lengthdir_y(3,45),obj_solid) { x+=lengthdir_x(3,45) y+=lengthdir_y(3,45) } break case 23://DS if !place_meeting(x+lengthdir_x(3,315),y+lengthdir_y(3,315),obj_solid) { x+=lengthdir_x(3,315) y+=lengthdir_y(3,315) } break case 24://SA if !place_meeting(x+lengthdir_x(3,225),y+lengthdir_y(3,225),obj_solid) { x+=lengthdir_x(3,225) y+=lengthdir_y(3,225) } break } case muszą zostać! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Lipca 2013 Administratorzy Udostępnij Opublikowano 11 Lipca 2013 a co to ma robić i czym jest walk ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 11 Lipca 2013 Udostępnij Opublikowano 11 Lipca 2013 Ten kod działa, sądząc po komentarzach to jest to jakiś kod na sterowanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 11 Lipca 2013 Autor Udostępnij Opublikowano 11 Lipca 2013 tak to kod na sterowanie(client, inny gracz) walk jest to zmienna jaką się przesyła od clienta do serwera i na odwrót, aby chodzenie było płynne, a nie przesyłanie x i y raz na 3 sek, lub co gorsza co stepa mówiąc optymalizacja mam na myśli w tym przykładzie pozbycie się bilirda powtarzających się if i prawie tego samego kodu OFTOP: wytłumaczy mi ktoś jak postawić serwer z gamemakera na jakimś hostingu i do jakich cen dochodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 12 Lipca 2013 Udostępnij Opublikowano 12 Lipca 2013 mozna oto tak, dla inspiracji: GML //a 1 ldir[1,0]=1; ldir[1,1]=180; walk_name[1]="x"; walk_var[1]=-1; //w 2 ldir[2,0]=1; ldir[2,1]=90; walk_name[2]="y"; walk_var[2]=-1; //s 3 ldir[3,0]=1; ldir[3,1]=270; walk_name[3]="x"; walk_var[3]=1; //d /* ... dodaj dalse dane dla inne kieronki ... */ // //d 12 ldir[12,0]=3; ldir[12,1]=0; walk_name[12]="x"; walk_var[12]=3; walk=get_integer("input numer 1-12",""); if (!place_meeting(x+lengthdir_x(ldir[walk, 0], ldir[walk, 1]), y+lengthdir_y(ldir[walk, 0], ldir[walk, 1]), obj_solid) ) { variable_local_set(walk_name[walk], variable_local_get(walk_name[walk])+walk_var[walk] ); }; jesli nadal volisz case to mozes v case odvolyvac sie do scryptu if, podajoc popravnie zmienne :) dla AW, WS,DS... odpoviedno zmodifikuj kod GML Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 12 Lipca 2013 Autor Udostępnij Opublikowano 12 Lipca 2013 nie kminie tego kodu tam gdzie jest //a 1 ma być case tak? kod musi być wykonany w jednym skrypcie- kod wykonuje się gdy client dostanie informacje od serwera o zmianie kierunku/prędkośći innego gracza jesteś zza granicy? tam gdzie powinno być "w" piszesz "v" :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lipca 2013 Administratorzy Udostępnij Opublikowano 12 Lipca 2013 Moment, to jest zmienna z serwera, która mówi gdzie inny gracz idzie tak? To po co sprawdzanie kolizji? Btw. widzę, że używasz wszystkich możliwych kierunków podzielnych przez 45, oraz odległosci 1,2,3. W takim razie ja proponuję, aby zmienna walk wysyłała GML walk = (dystans << 4) || (kierunek div 45); a potem odbierasz: GML var dystans, kierunek; dystans = walk >> 4; kierunek = (walk & $FFF0) * 45; var xx,yy; xx = lengthdir_x(dystans,kierunek); yy = lengthdir_y(dystans,kierunek); if !place_meeting(x + xx,y+yy,obj_solid) {x += xx; y+=yy;} I to cała optymalizacja. Przypominam, ze walk ma w tym wypadku min. 16 bitów. Można oczywiście rozbić go na dwa bity, ale ten przykład pozwala na użycie dystansu większego niż 8 dzięki przesunięciom. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 12 Lipca 2013 Udostępnij Opublikowano 12 Lipca 2013 tak jestem z czech. przepraszam za bledy v polskim, nieuzyvam translatora bo robi duzy balagan i sam pak nierozumiem co on pisze :) kod vyzej jest v pelni funkcjonalny. event mouse click vystarczy. bedzie on ruszac x, y obiektem. tylko walk wprovadzam przez get_integer. case teraz niejest vogole potrzebne. //a 1 jest zamiast case 1 etc. jezeli jednak volisz case mozes dac do scriptu i v case podavac mu 4 argumenty GML //script _script_case_jaki_zrobis() ldir[1,0]=argument0; ldir[1,1]=argument1; walk_name[1]=argument2; walk_var[1]=argument3; if (!place_meeting(x+lengthdir_x(ldir[walk, 0], ldir[walk, 1]), y+lengthdir_y(ldir[walk, 0], ldir[walk, 1]), obj_solid) ) { variable_local_set(walk_name[walk], variable_local_get(walk_name[walk])+walk_var[walk] ); }; case 1 moze byc ot tak GML case 1://a _script_case_jaki_zrobis(1, 180, "x", -1); break; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 12 Lipca 2013 Autor Udostępnij Opublikowano 12 Lipca 2013 no no Gnysek, nie wiem co ten kod oznacza, ale mi się podoba wytłumacz mi tylko na chłopski rozum: GML walk = (dystans << 4) || (kierunek div 45); dystans = walk >> 4; kierunek = (walk & $FFF0) * 45; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 12 Lipca 2013 Udostępnij Opublikowano 12 Lipca 2013 http://www.gmclan.org/index.php?czytajart=72 BUM Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 12 Lipca 2013 Autor Udostępnij Opublikowano 12 Lipca 2013 no właśnie to rozkminiam:D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lipca 2013 Administratorzy Udostępnij Opublikowano 12 Lipca 2013 proszę bardzo: dystans = 4, kierunek = 90; 4 to jest binarnie 100, a << 4 oznacza przesuń o 4 bity w lewo, zatem 1000000 - przesuwam po to, żeby na pierwsze 4 bity móc wstawić resztę z dzielenie kierunku przez 90. Dlaczego 4 bity? Bo 360/45 = 8, a 8 binarnie to 1000, zatem każdą mniejszą liczbę zapiszemy za pomocą mniejszej ilości bitów. DIV oznacza dzielenie całkowite, zatem 90/45 = 2, 135/45 = 3, ale 134/45 = 2 (bo zostaje 44 reszty). A potem to odwracamy. Takie trochę pakowanie bitów ;) Ale jak mówię, jak korzystasz z 39dll to możesz obie rzeczy przesłać osobno jako dwa bity, będzie łatwiej bez i przesuwania: GML walk1 = dystans; walk2 = kierunek div 45; odbieram: GML walk2*=45; var xx,yy; xx = lengthdir_x(walk1,walk2); yy = lengthdir_y(walk1,walk2); if !place_meeting(x + xx,y+yy,obj_solid) {x += xx; y+=yy;} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 12 Lipca 2013 Autor Udostępnij Opublikowano 12 Lipca 2013 tak 39dll, jakiś mój stary projekt znalazłem i mi się podoba tylko chciałem aby zamknąć oba parametry w 1 zmiennej, po co wysyłać 2 razy więcej dodatkowo wszystko bym wysłał w writeByte() nie short Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 13 Lipca 2013 Autor Udostępnij Opublikowano 13 Lipca 2013 gnysek twój 1 kod chyba nie działa GML (create) _dir=get_integer("kierunek",0) _speed=get_integer("prędkość",0) walk = (_speed << 4) || (_dir div 45); dystans = walk >> 4; kierunek = (walk & $FFF0) * 45; GML (draw) draw_text(0,0,"walk:"+string(walk)+"#PRZED#dir:"+string(_dir)+"#speed:"+string(_speed)+"#PO#dir:"+string(kierunek)+"#speed"+string(dystans)) i wyświetla mi sie: walk:1 PRZED dir:45 speed:1 PO dir:0 speed:0 co robie źle?! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 13 Lipca 2013 Udostępnij Opublikowano 13 Lipca 2013 dlatego ze || jest logic or a | jest bit or. sproboj GML walk = (_speed << 4) | (_dir div 45); a tak przy okazji, chyba lepiej bedzie popravic: GML kierunek = (walk & $FFF0) * 45; na GML kierunek = (walk & $0F) * 45; przeciez majo pozostac 4 nejmiej vazne bity ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 14 Lipca 2013 Autor Udostępnij Opublikowano 14 Lipca 2013 Nie wiem jak to działa, ale działa:D Czechy królują! dzięki ereg! B) edit: co to są za znaczki? $FFF0 gdzie mam szukać żeby o tym poczytać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ereg Opublikowano 14 Lipca 2013 Udostępnij Opublikowano 14 Lipca 2013 rad pomoge jesli moge :) $FFF0 masz tutaj princip gnyska jest ladny i prosty. pakovanie: 1-255 decymalnie jest 00000000 - 11111111 bitowo do Bajtu walk zapisuje 4 xxxx bity speed ( zapis jest od pravej strony) 0000xxxx presuva o 4 bity do leva xxxx0000 i zapisuje ctery yyyy bity znow od prava( najmien znacoce bity so od prava) xxxxyyyy teraz walk ma v polovie bajtu speed a v polovie direction(max 16 direction, bo wiecej sie niezmiesci v 4 bite) i wysylasz. odwrotnie: do speed zapisujesz walk po przesunieciu 4 bite v pravo. xxxxyyyy>>>> 0000xxxx. speed=0000xxxx do direction zapisujesz walk , ale dzieki bitovej masce 00001111 i operacji bite AND( | ) nulujesz bity xxxxx i pozostaje tylko yyyy direction = xxxxyyyy | 00001111 = 0000yyyy moj stary przyklad bral pod uwage twe zodanie na "case musi byc" :) ale gnysek jest bardziej efektivny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kriso99 Opublikowano 14 Lipca 2013 Autor Udostępnij Opublikowano 14 Lipca 2013 dzięki :w00t2:, będę się tego uczył! 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ę