OriPL Opublikowano 16 Lutego 2009 Udostępnij Opublikowano 16 Lutego 2009 moj problem polega na: w grze stoja 2 zamki...(malo istotne) z nich wylaza ludziki/zolnieze po nacisniecu klapisza... im wiecej wypuszcze ludzikow z zamku 1 to tym wieksze jest opuznienie... puszczam ludzika ze zamku nr1 i dopiero po chwili w 2 kliencie widac ze wypuscilem ludzika... NATOMIAST... jak wypuszczam ludzika z klienta 2 to w 1 kliencie sa tworzone odrazu!!(bez opusnienia) moja aplikacja nie sklada sie z SERWER i KLIENT osobno tylko to jest zloczone razem... zapodam troche kodu moze cos rozjasni... moze cos zle napisalem... tworzenie sesji: GML client = tcpaccept(listen,true); if(client <= 0) exit; global.otherplayer = client; room_goto(rm_game); dolaczanie: GML global.master = false; ip = get_string("Enter the ip to connect to", "127.0.0.1") server = tcpconnect(ip, 14804, 1); if(server <= 0) { show_message("Unable to connect to server"); exit; } global.otherplayer = server; room_goto(rm_game); ODBIERANIE WYSLANYCH WIADOMOSCI: GML // Handle messages var size; size = receivemessage(global.otherplayer); if(size < 0) break; if(size == 0) { show_message("The other player left the game"); game_end(); } messageid = readbyte(); ping=0 switch(messageid) { case 0: //BEGIN HEAL// global.hp_left = readshort(); global.hp_right = readshort(); //END HEAL// break; //BEGIN WARRIOR LEFT and RIGHT// case 1: xx=readshort(); yy=readshort(); warrleft = instance_create(xx,yy,obj_warrior_left) warrleft.direction=readshort(); warrleft.speed=readshort(); break; case 2: xx=readshort(); yy=readshort(); warrright = instance_create(xx,yy,obj_warrior_right) warrright.direction=readshort(); warrright.speed=readshort(); break; //END WARRIOR// case 3: pigi = readbyte(); break; } narazie malo... bedzie wiecej ale nie moge robic dalej dopuki nie uporam sie z tym bledem... OBJ WARIOR_RED(zamek 1) create: GML direction=0 speed=4 if global.master=true { clearbuffer(); writebyte(1); writeshort(x) writeshort(y) writeshort(direction); writeshort(speed); sendmessage(global.otherplayer); } kolizja ze zamkiem2: GML if global.master=true { global.hp_right-=5 } instance_destroy(); OBJ_WARIOR_BLUE(zamek 2) create: GML direction=180 speed=4 if global.master=false { clearbuffer(); writebyte(2); writeshort(x) writeshort(y) writeshort(direction); writeshort(speed); sendmessage(global.otherplayer); } Kolizja z zamek 1 GML if global.master=true { global.hp_left-=5 } instance_destroy(); [ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 18 Marca 2009 Udostępnij Opublikowano 18 Marca 2009 Szczerze mówiąc jak to widzę, to nie mam zielonego pojęcia skąd te opóźnienie. Tak jest nawet jak odpalasz gre 2 razy i łączysz się sam ze sobą? Jakby co, zauploaduj gdzieś projekt, spakuj rarem i zrób na hasło, podeślij mi link + pass, przeglądnę obadam i jak do czegoś dojdę to pomogę. Co do mojej wiarygodności, to raczej każdy user na forum by ci powiedział, że możesz mi zaufać ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
OriPL Opublikowano 20 Marca 2009 Autor Udostępnij Opublikowano 20 Marca 2009 hmmmm a posiadasz GM7.0?? bo ja pisze właśnie na nim... ale ok... wysłałem ci na pm wszystkie informacje ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
REC* Opublikowano 15 Kwietnia 2009 Udostępnij Opublikowano 15 Kwietnia 2009 Opóźnienie jest dlatego, że recvmsg() trzeba dać w pętli. Np.: jak gra idzie na room_speedzie=60 to w ciagu 1 sekundy odpierasz maksymalnie 60 "wiadomości" a co jak np dostanie sie jakos 61 wiad.? 1 zostaje w kolejcie i tak pomalu sie robi "korek" moja rada: ODBIERANIE WYSLANYCH WIADOMOSCI: // Handle messages var size; wile(true) { size = receivemessage(global.otherplayer); if(size < 0) break; if(size == 0) { show_message("The other player left the game"); game_end(); } messageid = readbyte(); ping=0 switch(messageid) { case 0: //BEGIN HEAL// global.hp_left = readshort(); global.hp_right = readshort(); //END HEAL// break; //BEGIN WARRIOR LEFT and RIGHT// case 1: xx=readshort(); yy=readshort(); warrleft = instance_create(xx,yy,obj_warrior_left) warrleft.direction=readshort(); warrleft.speed=readshort(); break; case 2: xx=readshort(); yy=readshort(); warrright = instance_create(xx,yy,obj_warrior_right) warrright.direction=readshort(); warrright.speed=readshort(); break; //END WARRIOR// case 3: pigi = readbyte(); break; } } Myślę że powinno działać :) 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ę