Skocz do zawartości

Ignorowanie reszty wiadomości.


Rekomendowane odpowiedzi

Witam. Mam taki problem z 39dll:

Wysyłanie:

GML
if keyboard_check(costam)

{

writebyte(1)

}

if keyboard_check(costam)

{

writebyte(2)

}

Odbieranie:

var msg,nag;

msg=receivemessage(othersocket)

if msg

{

nag=readbyte()

switch(nag)

{

case 1:

cos

break;

case 2:

cos

break;

}

}

I teraz załóżmy że przy wysyłaniu są naciśnięte obydwa przyciski - wysyłają się 2 nagłówki. A przy odbieraniu? W pierwszym stepie odczyta nagłówek 1, a dopiero w drugim nagłówek 2 - czyli opóźnienie jednego stepa, a jak przez więcej stepów będzie wciśnięte to to opóźnienie będzie coraz większe. Jak temu zapobiec? Tak sobie myślałem, że można by w odbieraniu dać:

GML
repeat(ilość_wszystkich_rodzajów_nagłówków)

{

odbieranie

}

I wtedy by odebrało, ale z drugiej strony to teraz nie przesył danych, ale gra by mogła mulić, ale nie jestem pewien.. no jakby duzo bylo tych rodzajów. Albo może:

while(msg) ?

Doradźcie coś, co z tym zrobić.

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobić tak...

GML
if keyboard_check(vk_up) nagbyl[1]=true

if keyboard_check(vk_left) nagbyl[2]=true

clearbuffer()

for(i=0; i<2; i+=1)

{

if nagbyl=true writebyte(i)

}

sendmessage(othersocket)

...czy może tak...

GML
msg=receivemessage(othersocket)

while(msg)

{

msg=receivemessage(othersocket)

<odbieranie>

}

 

??

Odnośnik do komentarza
Udostępnij na innych stronach

ten drugi jest bez sensu coś raczej typu

GML
msg=receivemessage(othersocket)

while(msg)

{

while ToNieKoniecPakietu // sprawdzanie czy wszystkie bity zostały przeczytane

{

switch readbyte(msg) // czytanie po koleji kazdego bita, w pakiecie, w pętli (dlatego trzeba to zapętlić)

case 1: costam; break;

case 2: costam; break

...

}

 

}

kapiszi? kod moze byc nie prawidłowo napisany ale raczej powinienes zrozumiec ocb itd.

 

a co do pierwszego, to właśnie o to mi chodzi ;) tylko potem trzeba to jakoś sensownie odczytać. Tak właśnie działają co lepsze gry ;]

Odnośnik do komentarza
Udostępnij na innych stronach

Więc zdam się na pierwsze + mam lepszy pomysł: na początku stepa dam clearbuffer() a potem juz nie i bedzie sie dodawać bajt do buforu jeśli warunek jest spełniony, tylko trzeba jeszcze wysyłać, ile dodano bajtów do buforu.

 

thx Pieter

 

e: jednak nie bedzie problemu z tym zeby wyslac ile bajtów ma pakiet, bo jest juz taka funkcja w 39dll: buffsize.

No to już bardziej się chyba nie da zoptymalizować :D

Odnośnik do komentarza
Udostępnij na innych stronach

Więc zdam się na pierwsze + mam lepszy pomysł: na początku stepa dam clearbuffer() a potem juz nie i bedzie sie dodawać bajt do buforu jeśli warunek jest spełniony, tylko trzeba jeszcze wysyłać, ile dodano bajtów do buforu.

 

1243089545823_4a1ab67d5ef86.jpg

- Jesteś geniuszem

 

- Natomiast ty jesteś spamerem. Dostajesz bana na tydzień, jak nie pomoże to permamentnego.

Borek

Odnośnik do komentarza
Udostępnij na innych stronach

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