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

[AllegAVI] Uzywanie.

Ostatnio zmodyfikowano 2011-01-24 18:34
Autor Wiadomość
DejaVu
» 2011-01-24 17:33:57
Czyli problem masz już rozwiązany? :) Klepnij ku pamięci jakimś sprawnym fragmentem kodu by zadowolić ewentualnych przyszłych odwiedzających ;p
P-26998
akwes
Temat założony przez niniejszego użytkownika
» 2011-01-24 18:34:37
C/C++
/* Pisane w DEV-C++ 4.9.9.2
* 1. Tworzymy nowy pusty projekt.
* 2. Dodajemy do linkera: -lallegavi -lvfw_avi32 -lvfw_cap32 -lvfw_ms32 -lalleg -lstdc++
* (jest to w Projekt>Opcje Projektu>Parametry>Konsolidator)
* (kolejnosc jest wazna)
* (zapewne większości z tego nie macie, wiec tak, lvfw, są do zassania na internecie,
* a AllegAVI oraz Allegro są do zassania przez Narzedzia>Sprawdz, czy...
* (jezeli ktos nie znalazl to link: http://oginer.webcindario.com/files/vfw32_mingw.zip, ale one lubia wygasac)
* 3. Musimy mieć jakiś plik *.avi, dla napisów na początku gry, prostej animacji (po ścieżkach ruchu,
* zanikanie, wejście wyjście) idealny będzie MS Office 2010, który posiada zapisywanie prezentacji do
* klipu filmowego. Później musimy przekonwertować plik (*.wmv) na (*.avi) do tego dobry będzie program
* (darmowy) Any Video Converter, który posiada bardzo dużo opcji oraz polski interfejs. Możemy ustawić tam
* zarówno ilość FPS jak i rozdzielczość, ale co najważniejsze wybrać KODEK, którym się posłużymy do
* stworzenia wideo. Mi działa jedynie kodek msmpeg4v2 i jego polecam uzywac.
*/

/* BIBLIOTEKI POTRZEBNE DO CLAEGO PROCESU */
#include <allegro.h>
#include <winalleg.h>
#include <allegavi.h>

/* FUNKCJA INICJUJACA I DENINCJIUACA ALLEGRO */
void init();
void deinit() { clear_keybuf(); }

/* GLOWNA FUNKCJA MAIN */
int main()
{
    init();
   
    BITMAP * buffer = create_system_bitmap( SCREEN_W, SCREEN_H ); // Tworzymy bitmape do double bufferingu,
    AllegAVI film; // Tworzymy zmienna typu AllegAVI,
    film.Open( "film.avi" ); // Otwieramy plik, ktory w tym przypadku jest w tym samym
    // folderze co nasz program w postaci *.exe
    film.PlayStart_Direct(); // Funkcja przygotowywujaca wszystko do wyswietlenia filmu
   
    while( !key[ KEY_ESC ] ) // Dopoki ogladajacy nie nacisnie przycisku escape
    {
        if( !film.PlayStep( buffer, 0, - 20, true, false ) ) // Wyswietlamy klatke z filmu
        {
            film.PlayRestart(); // Jezeli film sie zakonczy, to go restartujemy, 
            film.PlayStep( buffer, 0, - 20, true, false ); // i zeby nie tracic czasu wyswietlamy klatke.
        }
        blit( buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H ); // wszystko przenosimy na buffer
    }
    film.PlayEnd(); // Konczymy pokaz,
    film.Close(); // Zamykamy,
    destroy_bitmap( buffer ); // oraz sprzatamy po sobie
   
    return 0; // kwestia formalnosci i zwrocenia zera
}
END_OF_MAIN()

/* FUNKCJA INICJUJACA */
void init() {
    int depth, res;
    allegro_init();
    depth = desktop_color_depth();
    if( depth == 0 ) depth = 32;
   
    set_color_depth( 32 );
    res = set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 320, 240, 0, 0 );
    if( res != 0 ) {
        allegro_message( allegro_error );
        exit( - 1 );
    }
    install_keyboard();
}
/* KONIEC FUNKCJI INICJUJACEJ */

Taki sposób pozwala nam dodatkowo rysować co chcemy za filmem i przed filmem, odpowiednio edytując buffer, przed wyswietleniem klatki, lub po.

Dziękuje za pomoc w rozwiązaniu problemu i pozdrawiam :D
P-27003
1 2 « 3 »
Poprzednia strona Strona 3 z 3