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

Zabawa z menu i czasem

Ostatnio zmodyfikowano 2012-08-15 21:35
Autor Wiadomość
Admixior
Temat założony przez niniejszego użytkownika
Zabawa z menu i czasem
» 2012-08-15 19:23:51
Mam następujący problem.
Używam sfml i klasy Clock. Jak wiadomo ta funkcja wraca wartość minionego czasu (która rośnie). Pozycje mojego menu jest (dla prostoty można powiedzieć) wprost proporcjonalna do czasu. Jednak moje menu nie tylko się wysuwa bo też i wsuwa ;].
Więc wystarczy np dla 2sec: 2.f-Clock.float(); ale życie nie jest takie proste.
Jeśli w połowie wysuwania menu ktoś zechce go schować? to wtedy występuje niemiły dla oka efekt. Menu skacze...
•jeśli zresetuje czas to do samego końca
•jeśli nie zresetuje to do miejsca w którym by to menu by doszło w czasie który już miną od początku wysuwania
i się chowa.

Analogiczny efekt jeśli chowamy i nagle zacznie się wysuwać.

Wie ktoś jak temu poradzić?
P-62598
m4tx
» 2012-08-15 19:32:26
Hm... Taki Quake 3 na przykład. Jak otwierasz konsolę, to wszelkie ponowne wciśnięcia klawisza ` są ignorowane dopóki konsola się całkowicie nie wysunie. Wydaje mi się, że w Twoim przypadku byłoby to również dobrym rozwiązaniem :)
P-62600
Admixior
Temat założony przez niniejszego użytkownika
» 2012-08-15 19:45:24
Dobry pomysł. Zrobię tak, ale jakby ktoś wpadł na dobry prosty sposób jak to rozwiązać bez blokady to byłbym rad. Zawsze kiedyś może się przydać ;]
P-62604
waxx
» 2012-08-15 19:59:57
nie rozumiem jaki jest problem z resetowaniem timera?
interpoluj liniowo po czasie od aktualnej pozycji przy resecie do pozadanej i smiga
P-62605
Admixior
Temat założony przez niniejszego użytkownika
» 2012-08-15 20:20:39
hmm. Nie za bardzo rozumiem co masz na myśli... nie jestem na tym poziomie z matematyki.
Dodam że "wprost proporcjonalna do czasu." dałem dla uproszczenia. Jakby był inny prostszy sposób, ale tak naprawdę to jest sinus. podaje jako parametr czas/2  (czyli max 2 sec)  max liczba 1  później mnożę przez 5/8 pi i jest - mam wysokość jaką powinno zajmować menu.
//edit:
Dodam że reset ustawia na 0, nie mam wpływu żeby to zmienić
P-62606
waxx
» 2012-08-15 20:37:10
pseudokodem zebys wiedzial ocb
C/C++
int kierunek;
bool ruszasie;
int startY;

if( menuklikniete )
{
    timer.Reset();
    ruszasie = true;
    //ustal jeszcze ktory kierunek [gora/dol] i jakie jest startY (tzn np jak jest calkowicie schowane to startY = 0, a jak user kliknal zeby zwinac jak sie rozwijalo i mialo akurat np 300 to startY = 300;
}

///
if( ruszanie ) //zakladam dla przykladu ze 500 to pozycja maksymalna na ktora sie wysuwa
{
    if( kierunek == DOL )
    {
        if( timer.GetElapsedTime() < 2.0f ) // 2 sekundy ma sie ruszac
        {
            pozycjaMenuY = startY +(( 500 - startY ) *( timer.GetElapsedTime() / 2.0f ) );
        }
        else
        {
            pozycjaMenuY = 500;
            ruszanie = false;
        }
    }
    else
    {
        if( timer.GetElapsedTime() < 2.0f )
        {
            pozycjaMenuY =( startY -( startY *( timer.GetElapsedTime() / 2.0f ) ) );
        }
        else
        {
            pozycjaMenuY = 0;
            ruszanie = false;
        }
    }
}

z palca pisalem wiec daj znac czy robi
P-62607
Admixior
Temat założony przez niniejszego użytkownika
» 2012-08-15 21:08:19
Trzeba chyba będzie dorobić jeszcze jedną zmienna która będzie przetrzymywała czas żeby móc odjąć. Bo jeżeli ktoś zrobi tak to wtedy będzie (nawet choćby była sama końcówka) menu mu się chowało 2 sec
P-62608
waxx
» 2012-08-15 21:35:18
hmmm to latwo mozna wyliczyc

czasZjazduWDol = ((500 - startY) / 500.0f) * 2.0f;
czasZjazduWGore = ((startY) / 500.0f) * 2.0f;
P-62612
« 1 »
  Strona 1 z 1