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

Wysuwanie menu i chowanie menu

Ostatnio zmodyfikowano 2012-08-14 14:50
Autor Wiadomość
Admixior
Temat założony przez niniejszego użytkownika
Wysuwanie menu i chowanie menu
» 2012-08-13 22:25:14
Wie ktoś jak można zrobić płynne wysuwanie i wsuwanie menu, takie aby na początku szybko weszło i zwalniało, i odwrotnie wysuwanie.
Mogę też zrobić że równym tempem się wysuwa i w pewnym momencie zaczyna zwalniać i odwrotnie chowanie.
Jeśli ktoś kiedyś robił coś podobnego byłbym wdzięczny za dobrą radę.
P-62434
akwes
» 2012-08-13 22:28:17
Niech zmienna mówiąca o szybkości zwiększa się o przyspieszenie, zgodnie ze wzorem na ruch przyspieszony :) Z powrotem wzór na ruch opóźniony byle wektorów nie pomylić.
P-62435
SeaMonster131
» 2012-08-13 22:28:30
C/C++
menu.speed = 5;
if( wejscie )
{
    menu.x += menu.speed;
    menu.speed -= 0.5;
}

menu.speed = 1;
if( wyjscie )
{
    menu.x -= menu.speed;
    menu.speed += 0.5;
}
+ jakieś ograniczenia itd.. ?
P-62436
Admixior
Temat założony przez niniejszego użytkownika
» 2012-08-13 22:41:39
@up: właśnie o tym ograniczniku nie pomyślałem :)
THX
P-62437
m4tx
» 2012-08-14 08:01:44
Wie ktoś jak można zrobić płynne wysuwanie i wsuwanie menu, takie aby na początku szybko weszło i zwalniało, i odwrotnie wysuwanie.
Funkcja sin() - bardzo prosto można to zrobić :)
P-62438
Mrovqa
» 2012-08-14 13:15:18
Ja pisałem kiedyś płynny ruch, resize oraz zmianę przezroczystości okna w WinAPI to robiłem to na prostej zasadzie - funkcja animująca przyjmuje adres na funkcję matematyczną, tzn:
C/C++
//w funkcji animujacej:
act_pos = func_mat( act_time / max_time ) * scale;

//i funkcja matematyczna:
double func_mat( double progress ) // wartosc 0 do 1
{
    return 1 -( progress * progress ); // i tu mozesz zastosowac dowolna funkcje matematyczna
}
Powyższy pomysł jest bardzo uniwersalny i można samemu stworzyć ciekawe, dodatkowe animacje ;)
P-62449
Admixior
Temat założony przez niniejszego użytkownika
» 2012-08-14 14:50:44
Kilka godzin zabawy i działa
C/C++
#include <cmath>
int Menu::MoveMenu( void )
{
    //[a href="http://translate.google.pl/#pl/en/nie%20wiem%20dlaczego%20ten%20r%C4%85bany%20kod%20dzia%C5%82a%20ale%20jest%20potrzebny" name="Swoisty komentarz"]
    float wspolczynnik = 3.1415926535f * 5.f / 8.f;
    if( show )
    {
        if( sin_pos >= 1.f ) return 0;
       
        sin_pos += 0.01f;
        if( sin_pos > 1.f ) sin_pos = 1.f;
       
    }
    else
    {
        if( sin_pos <= 0.f ) return 0;
       
        sin_pos -= 0.01f;
        if( sin_pos < 0.f ) sin_pos = 0.f;
       
    }
    float move_full =-( sinf( wspolczynnik * sin_pos ) *( hide_pos - show_pos ) );
    float move = move_full - last_pos + hide_pos;
    last_pos += move;
    up.Move( 0, move );
    down.Move( 0, move );
    for( size_t i = 0; i < przyciski.size(); ++i )
         przyciski[ i ]->buttonMove( 0, move );
   
    return 0;
}

W skrócie pozycja na osi y menu jest względna do pozycji sinusa na osi y w danym punkcie (od 0 do 1*5/8*pi (w radianach)) przez co menu się opuści i później trochę podniesie  :)
P-62462
« 1 »
  Strona 1 z 1