Skocz do zawartości

problem z 39dll


OriPL

Rekomendowane odpowiedzi

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

  • 1 miesiąc temu...

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

  • 4 tygodnie później...

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

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