Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Drganie obiektów gry podczas przemieszczania

Ostatnio zmodyfikowano 2013-07-15 18:37
Autor Wiadomość
Wicon
Temat założony przez niniejszego użytkownika
» 2013-07-15 18:37:31
Dobra. Zrobiłem coś takiego:
C/C++
double fpstime; //zmienna przechowująca czas
DWORD oldtime = GetTickCount(), newtime; // Pierwszy pomiar czasu
while( oknoAplikacji.isOpen() )
{
    // Tutaj aktualizacja pozycji obiektów
    // W ten sposób mierzę czas przebiegu jednej pętli
    newtime = GetTickCount();
    fpstime = newtime > oldtime ?( newtime - oldtime ) / 1000.0f
        : 0.0f;
    oldtime = newtime;
    while( oknoAplikacji.pollEvent( zdarzenie ) )
    {
        //-->Jeśli wciśnięto klawisz (zależy który, w tą stronę przesuniemy postać)
        //-->Jeśli nie wykryto kolizji (dla każdej strony świata osobno)
        //   tu obracam postać w zależności od tego, w którą stronę gracz chce przemieścić
        //   postać (zmieniając teksturę)
        x -= v * fpstime * playerspeed; // No i tutaj nasze przemieszczenie w czasie.
        // -->x, to zmienna typu double, przechowuje współrzędną w osi x
        // -->v, prędkość stała dla wszystkich obiektów gry (typu double)
        // -->playerspeed to zmienna określająca czy gracz włączył chód czy bieg
        // --> No i fpstime czas trwania ostatniej pętli
    };
    //-->Rysowanie tego, co jest pod postacią
    //-->Rysowanie postaci
    //-->Rysowanie tego, co jest nad postacią (UI wyświetlam korzystając z pozycji gracza.
    //   (x-+szerokość okna/2, y-+wysokość okna/2)
};

No to co może mieć znaczenie to chyba wypisałem. Kodu brak, żeby inni nie brali gotowca i też się trochę pomęczyli. (Szczęśliwy to programista, który potrafi używać mózgu:))
Drgania w zasadzie ustąpiły. Są tak nieznaczne, że gracz może pomyśleć, że są one celowe. Przynajmniej już oczopląsu od tego nie dostaje.

EDIT:
Postanowiłem pomimo upływu wielu miesięcy otworzyć temat na nowo i zaktualizować rozwiązanie problemu, ponieważ to wyżej nie jest całkowicie poprawne. Jak się okazało rozwiązanie jest banalne. Wystarczyło zmienić miejsce aktualizacji pozycji w kodzie. Tzn. zmienne x i y aktualizuje w pętli ze zdarzeniami, a metodę ".SetPosition (x,y)" dla obiektów wywołuję poza pętlą zdarzeń przed samym rozpoczęciem renderowania obiektów. Dzięki temu podczas przemieszczania interfejs nie będzie drgał i skakał. Mam nadzieję, że komuś to kiedyś pomoże. :)
P-87982
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4