Alternative Opublikowano 18 Grudnia 2010 Udostępnij Opublikowano 18 Grudnia 2010 Zrobiłem przesyłanie danych w jednym pakiecie, lecz efekt jest dziwny - gracze suną z różnymi prędkościami, pozycja przeskakuje z 0 do 1200 itp. Co jest nie tak?: GML (Wysyanie) var ps; for(i=1; i<=n; i+=1) { ps=p[i,0]; for(a=1; a<=n; a+=1) { if a=i continue; clearbuffer(); writebyte(3); writebyte(a); if p[a,1] writeshort(p[a,2]); if p[a,3] writeshort(p[a,4]); if p[a,5] writeshort(p[a,6]); if p[a,7] writebyte(p[a,8]); if p[a,9] writestring(p[a,10]); if buffsize()>2 sendmessage(ps); } } GML (Odbieranie) case 3: var pip; pip=readbyte(); while(1) { if bytesleft()<=0 { break; } else { switch(readbyte()) { case 1: p[pip].x=readshort(); break; case 2: p[pip].y=readshort(); break; case 3: p[pip].image_angle=readshort(); break; case 4: p[pip].hp=readbyte(); break; case 5: p[pip].name=readstring(); add_line(p[pip].name+" joined the game!",c_red); break; } } } break; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 18 Grudnia 2010 Udostępnij Opublikowano 18 Grudnia 2010 GML pip=readbyte();Powinno być w pętli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Alternative Opublikowano 18 Grudnia 2010 Autor Udostępnij Opublikowano 18 Grudnia 2010 jak to w pętli? pip to id gracza którego odbiera się dane. może całym kodem zarzucę bo to taki urywek w innej pętli i ciężko się domyślić: GML var msg,i,hed; while(1) { msg=receivemessage(server); if msg>0 { hed=readbyte(); switch(hed) { case 0: var obj; myid=readbyte(); n=myid; for(i=1; i<myid; i+=1) { obj=instance_create(0,0,pother); p=obj; obj.myid=i; obj.x=readshort(); obj.y=readshort(); obj.hp=readbyte(); obj.name=readstring(); obj.weapon=readbyte(); } break; case 1: var obj; n+=1; obj=instance_create(0,0,pother); p[n]=obj; obj.x=readshort(); obj.y=readshort(); break; case 2: pip=readbyte(); add_line(p[pip].name+" has left the game!"); with(p[pip]){instance_destroy();} with(pother){if myid>player.pip{myid-=1;}} del(pip); break; case 3: var pip; pip=readbyte(); while(1) { if bytesleft()<=0 { break; } else { switch(readbyte()) { case 1: p[pip].x=readshort(); break; case 2: p[pip].y=readshort(); break; case 3: p[pip].image_angle=readshort(); break; case 4: p[pip].hp=readbyte(); break; case 5: p[pip].name=readstring(); add_line(p[pip].name+" joined the game!",c_red); break; } } } break; case 4: add_line(readstring(),c_red); break; } } else if msg=0 { closesocket(server); show_message("Połączenie z serwerem zostało zerwane!"); game_end(); exit; } else { break; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 18 Grudnia 2010 Udostępnij Opublikowano 18 Grudnia 2010 Wysyłasz dane w formacie <gracz><typ><dane>, a odczytujesz <gracz><typ><dane><typ><dane>... aż do opróżnienia bufora. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Alternative Opublikowano 18 Grudnia 2010 Autor Udostępnij Opublikowano 18 Grudnia 2010 no, tak robię. mam takie samo wysyłanie klienta do serwera i działa, a w drugą strone nie chce nie wiem why edit: zaraz.. ahhaaa. nie wysyłałem typu tylko same dane edit2: GML var ps; for(i=1; i<=n; i+=1) { ps=p[i,0]; for(a=1; a<=n; a+=1) { if a=i continue; clearbuffer(); writebyte(3); writebyte(a); if p[a,1] {writebyte(1); writeshort(p[a,2]);} if p[a,3] {writebyte(2); writeshort(p[a,4]);} if p[a,5] {writebyte(3); writeshort(p[a,6]);} if p[a,7] {writebyte(4); writebyte(p[a,8]);} if p[a,9] {writebyte(5); writestring(p[a,10]);} if buffsize()>2 sendmessage(ps); } if nl!="" { clearbuffer(); writebyte(4); writestring(nl); sendmessage(ps); nl=""; } } Wysyłanie poprawione, ładnie działa. A według was to co odwaliłem to dobra optymalizacja, w miare, czy denna ; d? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 18 Grudnia 2010 Udostępnij Opublikowano 18 Grudnia 2010 Denna. Tak samo jak poziom zabezpieczeń. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Alternative Opublikowano 18 Grudnia 2010 Autor Udostępnij Opublikowano 18 Grudnia 2010 ogółem to od prawie 2 lat nie mogłem zrobić gry mmo, aż w końcu kilka dni temu mi się udało, zrobiłem beznadzieje taką ale działa, i jak już nabrałem odrobinę doświadczenia to teraz napisałem od nowa, zabezpieczenia dam na końcu, ale się ograniczę tylko do bufferencrypt(), do mnożenia zmiennych i do sprawdzania w serwerze czy gracz przypadkiem za szybko się nie przemieszcza.. w końcu to taka strzelanka bez rejestracji. a jak najlepiej optymalizować to przesyłanie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 18 Grudnia 2010 Udostępnij Opublikowano 18 Grudnia 2010 Co nie zmienia faktu, że dalej będą beznadziejne. Nie wysyłając śmieci do klientów jak i do serwera. Obecnie masz całą masę niepotrzebnych informacji bez których mógłbyś się obyć gdybyś zmienił metodykę programowania aplikacji sieciowych - jednym słowem: powodzenia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Alternative Opublikowano 18 Grudnia 2010 Autor Udostępnij Opublikowano 18 Grudnia 2010 no w sumie to na wysłanie tych typów już jest 5 bajtów, ale jakbym to pokolei poukładał to przecież bym co step nie wysyłał, i wtedy by były różne zmienne, i bla bla bla a mi sie nie chce kombinować. dopiero zaczynam multiplayery, mam 14 lat, spaczoną wyobraźnię i słomiane ambicje, może kiedyś zrobię coś lepszego Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 26 Marca 2011 Udostępnij Opublikowano 26 Marca 2011 ify? Przy wysyłaniu danych? To skąd druga aplikacja ma wiedzieć co zostało wysłane a co nie? Dziwnie to wygląda xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 29 Marca 2011 Udostępnij Opublikowano 29 Marca 2011 Żeby nie wysyłać dwa razy tej samej informacji. 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ę