Skocz do zawartości

Utermiko

Użytkownicy
  • Postów

    796
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez Utermiko

  1. Tcp do rzeczy które są stosunkowo rzadko wysyłane i muszą dotrzeć, np. chat.

    Udp do rzeczy które są wysyłane często i utrata jednego nie wpłynie na rozgrywkę (można je zignorować) np. pozycja gracza. Należy przy tym pamiętać, aby numerować pakiety. Jeśli stara pozycja przyjdzie później niż aktualna to należy ją zignorować.

     

    Jak piszesz shootera to oczywiście najlepiej użyć obu. Do rozgrywek partyjnych typu kólko i krzyżyk, statki, szachy wystarczy TCP.

  2. Podobno TCP działa do 5GHz

    co?

     

    TCP zawsze dociera, ale może dotrzeć w kawałkach, zawsze w dobrej kolejności. Np. wysyłasz 'Hello World!' oraz 'Siema' Może dotrzeć tak:

    'Hell'

    'o Wor'

    'ld!Sie'

    'ma'

    Spowodowane jest to tym, że dane w TCP przesyłane są strumieniami. Aby temu zapobiec zazwyczaj dopisuje się na początku długość wiadomości (najczęściej 4 bajtowy int) i łączy je u odbiorcy.

     

    UDP jest szybki, ale pakiet możne nie dotrzeć wcale lub w innej kolejności. Pakiet zawsze dociera w całości więc nie występuje "dzielenie" pakietu tak jak w przypadku TCP gdyż tutaj dane są wysyłane datagramami.

    Wysyłasz 'Hello World!', 'Siema' oraz 'Witam'.

    Wiadomość może dojść tak:

    'Siema'

    'Witam'

    'Hello World!'.

     

    @EDIT A no i w przypadku 39dll bodajże nie trzeba się przejmować dzieleniem wiadomości w TCP. Jeśli się mylę to poprawcie mnie.

     

    @EDIT2 Przykłady? Google: java socket tutorial.

     

    @EDIT3 No i nie zapominaj, że jak chcesz UDP to u klienta muszą być odblokowane porty. Jeżeli to nie wchodzi w grę to użyj UDP Hole Punching.

  3. #include <iostream>
    using namespace std;
    
    void fun()
    {
        x=5;
    }
    
    int main()
    {
        int x=4;
        fun();
        cout<<x;
    
        return 0;
    }

    Tak jak powyżej nie można zrobić. Poczytaj o zasięgu zmiennych.

     

    Można zrobić tak:

    #include <iostream>
    using namespace std;
    
    int x;
    
    void fun()
    {
        x=5;
    }
    
    int main()
    {
        x=4;
        fun();
        cout<<x;
    
        return 0;
    }

    lub tak

    #include <iostream>
    using namespace std;
    void fun(int* x) //parametr nie musi się nazywać x
    {
        *x=5;
    }
    
    int main()
    {
        int x=4;
        fun(&x);
        cout<<x;
    
        return 0;
    }

     

    Pewnie znajdą się jeszcze jakieś bardziej eleganckie sposoby :)

  4. Poczytaj o tablicach.

     

    @EDIT Wtedy to będzie wyglądało mniej więcej tak:

    GML
    //SCR_INIT

    current_line=1

    warten=0

     

    for(i=0; i<=12; i+=1) text="";

    GML
    //SCR_STEP

    if keyboard_check(vk_f9) then game_restart();

    warten+=1

     

    if keyboard_check_pressed(vk_up ) {if current_line>1 {current_line-=1;warten=0}}

    if keyboard_check_pressed(vk_down) {if current_line<7 current_line+=1;warten=0}

     

    if keyboard_check_pressed(ord('G')) then {}

     

    if warten<=1 {keyboard_string=text[current_line]} else

    text[current_line]=keyboard_string

    GML
    //SCR_DRAW

    draw_set_color(c_green)

    for(i=2;i<=8;i+=1)

    {

    if (i == current_line)

    draw_text(16, 16*i, text[current_line] + "_");

    else

    draw_text(16, 16*i, text);

    //draw_text(16, 16*i, text[current_line]); //pomyłka hehe

    }

     

    Popraw sobie żeby indeksowało od zera.

    Pisane na szybko więc gdzieś może być błąd.

  5. IMO statki wroga, kamienie i wgl wszystko co się rusza jest takie mało płynne. Zmniejsz szybkość ruchu obiektów i zwiększ room speed.

     

    @EDIT I jeszcze losowe levele. Ty będziesz miał mniej roboty i efekt lepszy.

×
×
  • Dodaj nową pozycję...