Skocz do zawartości

39dll Tutorial


Rekomendowane odpowiedzi

Te skrypty to:

PACK(byte1,byte2):

GML
var byteA,byteB;

byteA = (argument0 div 255)+1;

byteB = (argument0 mod 255)+1;

return chr(byteA) + chr(byteB);

 

UNPACK(byte):

GML
var byteA,byteB;

byteA = ord(string_char_at(argument0,argument1*2-1))-1;

byteB = ord(string_char_at(argument0,argument1*2))-1;

return (byteA*255)+byteB

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm... Co myslicie o wysylaniu wszystkich danych za pomoca jednego writebyte i jednego stringa?

np:

writebyte(20); (funkcja update'ujaca pozycje)

writestring(string(x)+'|'+string(y)+'|'+string(image_angle));

 

A na serwerze rozdzielanie tego z powrotem na zmienne? Czy dzieki temu uniknalbym wysylania zbyt wielu bajtow?

Po co się męczyć jeszcze ich parsowaniem. W dodatku więcej bajtów będzie do wysłania.

Odnośnik do komentarza
Udostępnij na innych stronach

@Misztrzunio

a może by zrobić skrypt odczyt :

 

 

GML
if argument0 == 0

{

while( true )

{

if ( string_char_at( _s, _i ) == '|' )

{

argument1 = real( string_copy( _s, _temp, _i ) );

_temp = _i + 1;

break;

}

_i += 1;

}

}

else

{

while( true )

{

if ( _i = string_length( _s ) )

{

argument0 = real( string_copy( _s, _temp, _i ) );

break;

}

_i += 1;

}

}

 

 

a potem

GML
_s = readstring();

_i = 1;

_temp = _i;

odczyt(0,x);

odczyt(0,y);

odczyt(1,image_angle);//1 by sie dawalo jakby byla osatnia zmienna

Odnośnik do komentarza
Udostępnij na innych stronach

Miszczu, do tego wskaźników potrzeba, ty tylko operujesz argumentami. Myślisz, że taki głupi jestem? Do tego execute_string() jak już...

 

@Edit: Może tak:

skrypt odczyt:

GML
list = ds_list_create();

while( true )

{

while( true )

{

if ( string_char_at( _s, _i ) == '|' )

{

ds_list_add( list, string_copy( _s, _temp - _i - 1, _i ) );

_temp = _i + 1;

break;

}

if ( string_length( _s ) == _i )

{

ds_list_add( list, string_copy( _s, _temp - _i - 1, _i ) );

return list;

_i += 1;

}

}

}

Kod:

GML
_l = odczyt( '20|21|36' );

for( i = 0; i < ds_list_size( _l ); i += 1; )

show_message( ds_list_find_value( _l, i ) );

Nie testowane =P .

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A może założyć, że x i y są zawsze mniejsze od 65025 czyli FFFF (Hex), a image angle zapisywać za pomocą FFF (chociaż 4096 to trochę za dużo, ale FF czyli 255 to za mało :P) i mamy wtedy (4+4+3)*4 = 44 bitów zamiast jak w przypadku '20|20|167' 9*255 = 2295. Ale to tylko taka moja teoria. GM obsługuje chyba szesnastkowe liczby (zapisuje się je poprzedzając znakiem $).

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