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

[C++] tekst animacja

Ostatnio zmodyfikowano 2014-03-07 11:26
Autor Wiadomość
barttek8
Temat założony przez niniejszego użytkownika
[C++] tekst animacja
» 2014-03-06 00:38:11
Witam,
jestem nowy na forum i także zielony jeśli chodzi o programowanie.
Posiadam więdzę z TurboPascala i języka C, lecz C nie tak bardzo dużą. Także do rzeczy.
Potrzebuje pomocy, chciałbym zrobić program a dokładnie animacje tekstową, takie które są w keygeneratorach.
Mój programista ma urodziny i chciałem mu taki prezent zrobić by tekst się pojawiał falowany z życzeniami i muzyka 8bit.

Czy zna ktoś może sposób na zrobienie tego? Czy to jest bardzo skomplikowane niż mi się wydaje.
Przepraszam za taki brak wiedzy lecz dopiero zaczynam przygodę z programowaniem.

Pozdrawiam!
P-105717
RazzorFlame
» 2014-03-06 11:05:30
Ja bym prędzej zrobił animacje taką obrazkową. Nad tym co chciałeś zrobić, spędziłbyś bardzo dużo czasu.

Edit:
Jeżeli na prawdę chcesz coś takiego zrealizować to masz:
http:/​/gamedev.stackexchange.com​/questions/8727​/how-to-add-water-effect-to-an-image
P-105728
barttek8
Temat założony przez niniejszego użytkownika
» 2014-03-06 21:45:11
Nie wiem czy dobrze zrozumiałeś, widząc po linku nie o to mi chodziło.
Prędzej taki napis z muzyką 8 bit.

http://www.youtube.com/watch​?v=C2k-xiLmNSQ.
P-105778
michal11
» 2014-03-06 21:58:19
P-105782
RazzorFlame
» 2014-03-07 11:02:59
Aaa to bez problemu. Masz pare linii tekstu:
Dla każdej lini musisz mieć: pozycje od której ma się zaczynać tekst i długość. Przykład:
C/C++
std::string tekst = "Some text...";
int posFromX = 2; //2 kratki od lewej
int posFromY = 2; //druga linia w konsoli
int dlugosc = tekst.length(); //w taki sposob otrzymujemy jego dlugosc.
Teraz tylko wystarczy ułożyć pętle która od tyłu wyświetla tekst:
C/C++
void gotoxy( int x, int y )
{
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
for( int i = dlugosc - 1; i >= 0; i-- )
{
    animateChar( tekst[ i ], posFromX + i + 1, posFromY );
}
void animateChar( char znak, int posx, int posy )
{
    for( int x = 0; x <= posx; x++ )
    {
        gotoxy( x, posy );
        cout << znak;
        Sleep( 100 ); //1/10 sekundy
        if( x != posx )
        {
            gotoxy( x, posy );
            cout << " ";
        }
    }
}
P-105793
RazzorFlame
» 2014-03-07 11:26:58
Kurcze, tak mi się to spodobało, że aż napisałem klase do tego. Trochę łatwiejsza w obsłudze:
C/C++
void gotoxy( int x, int y )
{
    COORD cord;
    cord.X = x;
    cord.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), cord );
}

class KeyAnimation
{
    typedef std::vector < string > vTekst;
    vTekst m_Teksty;
    void animateChar( char znak, int posx, int posy )
    {
        if( znak == 32 )
        {
            gotoxy( posx, posy );
            cout << " ";
            return;
        }
       
        for( int x = 0; x <= posx; x++ )
        {
            gotoxy( x, posy );
            cout << znak;
            Sleep( 2 ); //1/10 sekundy
            if( x != posx )
            {
                gotoxy( x, posy );
                cout << " ";
            }
        }
    }
public:
    void animate( int x, int y )
    {
        int posFromX = x; //2 kratki od lewej
        int posFromY = y; //druga linia w konsoli
        for( int i = 0; i < m_Teksty.size(); i++ )
        {
            int dlugosc = m_Teksty[ i ].length(); //w taki sposob otrzymujemy jego dlugosc.
            for( int j = dlugosc - 1; j >= 0; j-- )
            {
                animateChar( m_Teksty[ i ][ j ], posFromX + j + 1, posFromY );
            }
            posFromY++;
        }
    }
   
    vTekst & getTexts()
    {
        return m_Teksty;
    }
   
};
Potem aby animować tekst:
C/C++
KeyAnimation animacja;
animacja.getTexts().push_back( "Text numer 1 -> przykladowy text" );
animacja.getTexts().push_back( "Text numer 2 -> przykladowy text" );
animacja.getTexts().push_back( "Text numer 3 -> przykladowy text" );
animacja.getTexts().push_back( "Text numer 4 -> przykladowy text" );
animacja.getTexts().push_back( "Text numer 5 -> przykladowy text" );
animacja.getTexts().push_back( "Text numer 6 -> przykladowy text" );
animacja.animate( 0, 0 );
Możesz do woli dodawać tekst ;)
P-105794
« 1 »
  Strona 1 z 1