Skocz do zawartości

39dll-owe wersje tych skryptów


klech

Rekomendowane odpowiedzi

Jak by wygładały te skrypty pod 39dll?

 

Czytanie danych:

 

GML
if global.master=false

 

{

 

x=mplay_data_read(1);

 

y=mplay_data_read(2);

 

}

 

Wysyłanie danych i chodzenie:

 

 

GML
if global.master=true

 

{

 

x-=global.s;

 

mplay_data_write(1,x);

 

}

Z góry dziękuję.

P.S.:Wiem że są artykuły ale nic z nich nie rozumiem.

Odnośnik do komentarza
Udostępnij na innych stronach

Wejdź sobie w dodatki,mój poradnik o 39DLL jak zrobić ping-ponga, to widzisz, to nie takie łatwe jak mplay, z resztą nie wiem xD

Odbieranie daje się w pętli, a wysyłając trzeba wysłać ID wiadomości... rozumiem że gra na 2 graczy? Jeśli tak to tutaj poradnik: https://forum.gmclan.org/index.php?showtopic=18378

Odnośnik do komentarza
Udostępnij na innych stronach

Odczytywanie:

GML
while (1)

{

var messageS;

messageS = receivemessage(socket);//otrzymujemy wiadomosc

 

if (messageS <=0) then break;//jesli nic nie odebralismy wylamujemy sie z petli

var mID;

 

mID = readbyte();//odczytujemy id wiadomosci

switch (mID)

{

case 1://id wiadomosci

x = readshort();//odczytanie wartosci (x)

y = readshort();//odczytanie wartosci (y)

break;

}

 

 

Wysyłanie:

 

GML
clearbuffer();//czyscimy buffer danych

writebyte(id_wiadomosci);//wysylanie id wiadomosci

writeshort(x);//wysylanie pozycji (x)

writeshort(y);//wysylanie pozycji (y)

with (obj)

{

sendmessage(socket);//wysylanie pozycji do wszystkich

}

 

tak to ogolnie wygląda przeanalizuj i poczytaj kursy.

Odnośnik do komentarza
Udostępnij na innych stronach

Wciąż tak naprawde nie czy mogę coś ruszać to założmy że przykładowy kod ruszania to:

GML
// to dla hosta

if global.master=true

{

x-=global.s

data_write(true,0,x,)

}

//a to dla klienta

if global.master=false

{

x-=global.s

data_write(true,0,x,)

}

//data_write to skrypt który zawiera to co masz w tutku</span></span>

Założmy że to co napisałem wyżej rozumiem.Ale przy odbieraniu jaki jest priorytet odbierania tzn. nie chcę żeby x stało się nagle y.Jak to przerobić bo tak szczerze to funkcje rozumiem(a całości nie) ale po co to umieszczać w wiadomości skoro można (chyba)tak samo jak w mplay(czyli id i wartość)?Jak to wygląda jak chcę odebrać x i y?

P.S.:Nie zdziwie się jak nie dacie mi odpowiedzi ): robie sie uciążliwy.

GML
while (1)

{

var messageS;

messageS = receivemessage(socket);

 

 

if (messageS <=0) then break;

 

var mID;

 

mID = readbyte();

 

switch (mID)

{

case 1:

x = readshort();

y = readshort();

break;

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

Założmy że to co napisałem wyżej rozumiem.Ale przy odbieraniu jaki jest priorytet odbierania tzn. nie chcę żeby x stało się nagle y.

 

Jeśli wysyłasz jako pierwsze x a jako drugie y:

 

GML
clearbuffer();

writebyte(ID);//wysyłamy id wiadomości

writeshort(x);//wysyłamy x

writeshort(y);//i y

sendmessage(socket);

 

To jest nasz kod wysyłu, z tego co widzimy najpierw wysyłami ID potem x i y i w takiej samej kolejności musimy odebrać te dane, czyli najpierw odebrać ID potem x a następnie y. Jeśli odbierzesz w innej kolejności wówczas x stanie sie y lub Id i bedzie bałagan.

 

Czyli Odbieramy to w ten sposób, po kolei:

 

GML
while (1)//pętla odbierania danych

{

var messageS;//zmienna tymczasowa

messageS = receivemessage(socket);//przypisujemy jej ilosc odebranych danych

 

if (messageS <=0) then break;//jesli nie ma danych wówczas wyłamujemy sie z pętli

var mID;//zmienna tymczasowa id

mID = readbyte();//TUTAJ ODCZYTUJEMY ID KTÓRE WYSŁALIŚMY PIERWSZE!

switch (mID)//switch wiadomo rozpoznajemy id i już wiemy jaką operacje maa wykonywać dostarczony nam pakiet danych

{

case 1:

x = readshort();//TUTAJ ODBIERAMY POZYCJE X KTÓRA ZOSTAŁA WYSŁANA JAKO DRUGA

y = readshort();//A TU POZYCJE Y KTÓRA ZOSTAŁA WYSŁANA JAKO 3 DZIEKI CZEMU NIC NAM SIE NIE PRZEMIESZA.

break;

}

}

 

 

ale po co to umieszczać w wiadomości skoro można (chyba)tak samo jak w mplay(czyli id i wartość)?

 

Tej części zdania nie czaje, sorry :D

 

Jak to wygląda jak chcę odebrać x i y?

 

Kod ci podałem już w moim 1 poście, poprostu, Client wysyła dane tak jak ci pokazałem do serwera a on rozsyła twoje x i y do reszty i je zmienia, dzieki temu wszyscy widzą ze sie przemiesciles.

 

uff...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ojej, poza samym odpowiednikiem tego kodu, trzeba też zrobić połączenie serwer-klient i wiele innych rzeczy, 39dll nie może być alternatywą tylko dla wybranych funkcji GMowych, on jest alternatywą tylko w całości i rozdzielnie z funkcjami mplay_* i funkcji tych nie można łączyć.

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