Skocz do zawartości

Przesyłanie danych


Alternative

Rekomendowane odpowiedzi

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

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

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

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

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

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

  • 3 miesiące temu...

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