Skocz do zawartości

Sutikku

Użytkownicy
  • Postów

    738
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    3

Odpowiedzi opublikowane przez Sutikku

  1. Wpadł mi taki pomysł. Zadziała on chyba tylko na dwa itemy w jednym miejscu chyba.

    Item1 przy kolizji z item2, zapisuje sobie id itemu2. Gracz mając kolizje z itemem1, sprawdza czy on nie ma przypisanego jakiegoś id innego obiektu. Jeśli tak, to zbieramy ten przypisany do zmiennej, jak nie to wiadomo, normalnie zbieramy item1.

  2. Tak sobie teraz myślę, że zależność który jest u dołu, a u góry jest zależne od tego kolejności w której nadajesz ten sam depth. Ty chcesz podnieść pierwsze wheat, czyli depth musi być mniejszy, czyli musi sobie pierwszy nadać depth niż wooden_floor. Tak rozkminiam, ale w sumie nie wiem czy to na pewno tak działa.

  3. Lepszą wersję gamemakera? Przecież mnie nie stać xd

    Ten edytor jest zrobiony pod starą wersję gamemakera, ale jest cały opatrzony w komentarze i banalnie prosty. Eksportuj sobie do gma i przeanalizuj cały. Jeśli czegoś nie rozumiesz to pisz na pw, albo tutaj.

  4. Żadne tam tajne, wysłałbym nawet cały projekt, ale jakby ktoś zobaczył kod, to wstyd ;d

    GML
    ///Wysyłanie pozycji

    buffer_seek(Buffer, buffer_seek_start, 0)

    buffer_write( Buffer, buffer_s8, 1 );

    buffer_write( Buffer, buffer_u8, instance_number(obj_player) );

    with(obj_player)

    {

    buffer_write( other.Buffer, buffer_u8, iid );

    buffer_write( other.Buffer, buffer_u16, x );

    buffer_write( other.Buffer, buffer_u16, y );

    buffer_write( other.Buffer, buffer_u8, image_angle/2 );

    buffer_write( other.Buffer, buffer_bool, key

    );

    buffer_write( other.Buffer, buffer_bool, key[UP] );

    buffer_write( other.Buffer, buffer_bool, key

    );

    buffer_write( other.Buffer, buffer_bool, key[DOWN] );

    }

    for(var i=0; i<MaxClients; i++)

    {

    if!(player==-1)

    network_send_packet( i, Buffer, buffer_get_size(Buffer) );

    }

    To jest najczęstszy kod który się wykonuje w kwestiach wysyłania.

    A odbieram tak

    GML
    var type_event = ds_map_find_value( async_load, "type" );

     

    switch( type_event )

    {

    case network_type_data:

    var buffer = ds_map_find_value( async_load, "buffer" );

    buffer_seek( buffer, buffer_seek_start, 0 );

    ReceivedPacket( buffer );

    break;

    }

    I jeszcze skrypt ReceivedPacket (okrojony)

    GML
    var buffer = argument[0];

    var msgid = buffer_read( buffer, buffer_s8 );

    switch( msgid )

    {

    case 1:

    //Zmiana pozycji graczy

    var num=buffer_read( buffer, buffer_u8 );

    for(var i=0; i<num; i++)

    {

    var iid=buffer_read( buffer, buffer_u8 );

    var xx=buffer_read( buffer, buffer_u16 );

    var yy=buffer_read( buffer, buffer_u16 );

    var ang=buffer_read( buffer, buffer_u8 );

    var p=player[iid];

    var right=buffer_read( buffer, buffer_bool );

    var up=buffer_read( buffer, buffer_bool );

    var left=buffer_read( buffer, buffer_bool );

    var down=buffer_read( buffer, buffer_bool );

    break;

    }

    Kodu trochę mam, więc nie wiem co dokładnie mam pokazać. Każde miejsce w którym wysyłam i odbieram?

  5. Ostatnio się trochę więcej bawię gmsowym networkingiem i ciągle mam nowe problemy. W sumie ten problem doświadczam od zawsze. Przyjmijmy, że po stronie serwera wysyłam do wszystkich klientów

    1 <-id komendy

    23 <- x

    12 <- y

    Wszystkie trzy są zapisane jako buffer_u8. I jednemu z klientów wyrzuca błąd, po którym można wywnioskować, że odebrane dane to

    0

    -102

    xxx

    Oczywiście te liczby to przykłady, ale takie coś jest powiedzmy znacznym problemem. I nigdy nie występuje u mnie jak testuje, tylko dopiero gdy testuje to z kimś innym. I tak się zastanawiam. Czy jeśli w ciągu jednego stepu, użyję dla jednego klienta dwa razy network_send_packet(), to może to być problemem?

    edit:

    natrafiłem na coś takiego

    http://gmc.yoyogames.com/index.php?showtopic=650252

    i z tego co rozumiem, czasem pakiety są "ucięte", a następnie dostaje to co zostało ucięte. I nie wiem jak sobie z tym radzić.

  6. Robię sobie standardowo gierkę multiplayer i taki mam problem.

    Ogarnąłem już jak robić poruszanie, tak żeby wyglądało w miarę dobrze. Powtarzam ostatnio dostane komendy od serwera. Czyli jeśli ktoś szedł ostatnio w lewo, to teraz pewnie też idzie w lewo, aż nie dostanę nowego pakietu. Wtedy staram się płynnie zmieniać pozycję u klienta, na taką jaką dostałem od serwera.

    Ale jak to zrobić z image_angle? Postać jest zawsze zwrócona w stronę kursora. Wysyłanie ciągle image_angle, to chyba nie najlepsze wyjście. A jeśli przyjmiemy, że w grze się strzela, to byłoby dziwne gdyby ktoś zaczął strzelać plecami.

×
×
  • Dodaj nową pozycję...