Skocz do zawartości

Zablokowane Dziwny bug?


Paqoo

Rekomendowane odpowiedzi

Mam w drav obiektu gracza coś takiego:

GML
//Draw the player...

draw_sprite_ext(sprite_index,-1,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend,image_alpha);

 

Jest to gra MMORPG. Jak gracz się pojawia na serwerze wyskakuje mi error:

error.gif

 

 

O co chodzi? Co mam robić? Wcześniej wszystko działało.. Co namieszałem?

Odnośnik do komentarza
Udostępnij na innych stronach

Ogólnie to powinno być:

GML
if( sprite_exists( sprite_index ) ) {

draw_sprite_ext(sprite_index, image_index,round(x),round(y),image_xscale,image_yscale,image_angle,image_blend, image_alpha);

}

No i pamiętaj, że indeksy spritów muszą być takie same na kliencie i serwerze jeśli używasz ich przy przekazywaniu danych.
Odnośnik do komentarza
Udostępnij na innych stronach

No, ale taka sama nazwa to dalej mało. Pod nazwami kryją się indeksy spritów, tak więc trzeba to trochę inaczej załatwić. Robisz takie dwie tablice:

GML
sprites_in[0] = sprite1;

sprites_in[1] = sprite2;

sprites_in[2] = sprite3;

sprites_in[3] = sprite4;

sprites_count = 4;

 

for( i = 0; i < sprites_count; i += 1 ) {

sprites_out[sprites_in] = i;

}

Powinno być coś takiego na serwerze i na kliencie. Teraz tak, przy wysyłaniu:
GML
writereal( sprite_out[sprite_index] );
i przy odbieraniu:
GML
sprite_index = sprite_in[readreal()];
Czy coś takiego. ;P
Odnośnik do komentarza
Udostępnij na innych stronach

Ale po co tak to komplikować? Moje pytanie: CZEMU TO SŁUŻY? Dlaczego muszę pisać to w jakichś tablicach?

 

I czegoś nie rozumiem-dlaczego ten bug zaczął się od niedawna pojawiać? Wcześniej wszystko działało jak trzeba.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak zapisujesz writereal to odczytujesz readreal. Po za tym, mógłbyś zmienić tablicę na globalną, wtedy nie będziesz musiał wszystkiego deklarować 10 razy w każdym obiekcie.

No i jeszcze jedno, klient i serwer to oddzielnie pisane aplikacje czy jako jedna?

Odnośnik do komentarza
Udostępnij na innych stronach

Są pisane oddzielnie. O rany ile to będzie roboty.. Pomóżcie mi z tym, bo ludzie na mnie liczą..

 

A jak napiszę tak:

 

wysyłanie:

writeshort(player.sprite_out[sprite_index]);

odbieranie:

player.sprite_index = sprite_in[readbyte()];

 

To będzie źle?

 

Jak piszę z tym writereal/readreal to wogóle nie działa, jakieś syntax errory są.

Odnośnik do komentarza
Udostępnij na innych stronach

Źle, tak:

writeshort(player.sprite_out[sprite_index]);

i

player.sprite_index = sprite_in[readshort()];

 

A readreal i writereal to tak mi się jakoś ubzdurało, oczywiście miałeś to zamienić na własne odpowiedniki, ja nie pamiętam funkcji 39dll. :P

Odnośnik do komentarza
Udostępnij na innych stronach

Ja miałem taki problem jak dobrze pamiętam, że wysyłałem sprite_index i odbierałem w serwerze i przesyłałem dalej do wszystkich... wkońcu to nie mogło się udać bo w obu klientach wywalało że nie ma takiego sprita. Taki sam problem może być u ciebie.

 

Cu.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...