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

Animacja sprite w grze [Allegro]

Ostatnio zmodyfikowano 2010-08-24 23:38
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
Animacja sprite w grze [Allegro]
» 2010-08-23 17:00:51
Witam
Mam zamiar napisac gre 2d, cos w podobie Little Fighter, moze ktos gral ^^. Narazie sprity i grafika sa zapozyczone ale tylko do przykladu. Otoz nie jestem pewien czy robie ta animacje prawidlowo. Narazie mozemy poruszac sie tylko strzalka w prawo. Oto kod:
C/C++
#include <iostream>
#include <allegro.h>

int main() {
    int x = 10, y = 220;
    int znak;
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 800, 300, 0, 0 );
   
    BITMAP * ludek_prawo = NULL;
    BITMAP * ludek_prawo2 = NULL;
    BITMAP * ludek_prawo3 = NULL;
    BITMAP * ludek_prawo4 = NULL;
    BITMAP * ludek_lewo = NULL;
    BITMAP * ludek_gora = NULL;
    BITMAP * ludek_dol = NULL;
    BITMAP * postac = NULL;
    BITMAP * mapa = NULL;
   
    ludek_prawo = load_bmp( "ludek_prawo.bmp", default_palette );
    ludek_prawo2 = load_bmp( "ludek_prawo2.bmp", default_palette );
    ludek_prawo3 = load_bmp( "ludek_prawo3.bmp", default_palette );
    ludek_prawo4 = load_bmp( "ludek_prawo4.bmp", default_palette );
    ludek_lewo = load_bmp( "ludek_lewo.bmp", default_palette );
    ludek_gora = load_bmp( "ludek_gora.bmp", default_palette );
    ludek_dol = load_bmp( "ludek_dol.bmp", default_palette );
    mapa = load_bmp( "mapa.bmp", default_palette );
   
    blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h );
    while( !key[ KEY_ESC ] ) {
        znak = readkey();
        while( key[ KEY_RIGHT ] ) { //Tutaj zaczyna sie animacja
            postac = ludek_prawo;
            mapa = load_bmp( "mapa.bmp", default_palette );
            masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h );
            blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h );
            rest( 50 );
            postac = ludek_prawo2;
            mapa = load_bmp( "mapa.bmp", default_palette );
            masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h );
            blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h ); x += 2;
            x += 6;
            rest( 50 );
            postac = ludek_prawo3;
            mapa = load_bmp( "mapa.bmp", default_palette );
            masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h );
            blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h );
            x += 6;
            rest( 50 );
            postac = ludek_prawo4;
            mapa = load_bmp( "mapa.bmp", default_palette );
            masked_blit( postac, mapa, 0, 0, x, y, postac->w, postac->h );
            blit( mapa, screen, 0, 0, 0, 0, mapa->w, mapa->h );
            x += 6;
        } //Tutaj sie konczy
    }
   
    readkey();
    destroy_bitmap( ludek_prawo );
    destroy_bitmap( ludek_prawo2 );
    destroy_bitmap( ludek_prawo3 );
    destroy_bitmap( ludek_prawo4 );
    destroy_bitmap( ludek_lewo );
    destroy_bitmap( ludek_gora );
    destroy_bitmap( ludek_dol );
    destroy_bitmap( postac );
    destroy_bitmap( mapa );
    allegro_exit();
} END_OF_MAIN();
Dalbym paczke razem z gra i kodem ale sam nie moge odpalic gry z folderu.Wyskakuje blad ze nie mozna znalesc pliku alld42.ddl. Odpala sie tylko wtedy gdy uruchomie ja w codeblocks...
P-21123
waxx
» 2010-08-23 17:11:47
Super a z czym problem?
Wgl to robisz wszystko zle nie zapetlaj petli w petli.
Zrob sobie timer i po prostu w kazdej klatce sprawdzaj czy np nie przekroczyl zalozmy 300ms (nie wiem jak to tam z timerami w allegro) i wtedy zmieniaj wskaznik na bitmape aktualnej klatki animacji. Lepiej jednak miec kazda klatke w jednym pliku i do blita brac tylko pewien obszar obrazka.
P-21124
Shell32
» 2010-08-23 18:09:35
najlepiej to nie bierz sie za pisanie gry jezeli niewiesz dlaczego gra sie nie odpala w innym folderu ;/ jezeli tam nie ma dllki to jest oczywiste...

wogole ze animacje robisz zoabcz kurs Easykodera... tam masz pieknie wytlumaczone..
ale najpierw pocwicz podstawy c++ ;/

Pozdro
P-21127
Savail
Temat założony przez niniejszego użytkownika
» 2010-08-23 21:34:58
dllki wogole w folderze z gra nie widze, albo jestem slepy albo tego nie ma...
podstawy c++ znam... Szczerze to sie troche pospieszylem z pisaniem gry 2d, bo nie doszedlem jeszcze w kursie do timerów ;p. Dzieki za przekierowanie mnie w kazdym razie
edit: waxx chodzi o zrobienie jednej duzej bitmapy na ktorej beda sprity, tak? Zrobilbym to ale nie wiem jak, nie wiem tez co wpisac w google, ogolnie nie moge tego znalesc...
P-21142
ison
» 2010-08-23 22:17:04
Zrobilbym to ale nie wiem jak, nie wiem tez co wpisac w google, ogolnie nie moge tego znalesc...
sam kombinuj
przecież funkcja blit i masked_blit oferuje ci 'cięcie' bitmapy w dowolnym momencie
P-21144
Savail
Temat założony przez niniejszego użytkownika
» 2010-08-23 22:55:57
no tak racja, nie pomyslalem o tym. Dzieki Ison
P-21146
Savail
Temat założony przez niniejszego użytkownika
» 2010-08-24 23:13:12
hmm a jak z bitmapy na ktorej znajduje sie wiele sprite'ow obrocic tylko kawalek tej bitmapy?(czyli 1 sprite). Znalazlem funkcje rotate_sprite ale to sie nadaje tylko do pojedynczego sprita i jesli sie nie myle to strasznie ostrosc ucieka po wykorzystaniu tego. Potrzebny mi tylko obrot o 180 stopni.
Jestem ciekawy czy w allgero da rade zrobic gre jak
Tutaj
czy moze wybrac jakas inna biblioteke graficzna?
P-21167
ison
» 2010-08-24 23:38:13
czy moze wybrac jakas inna biblioteke graficzna?
allegro jest najprostsza a sądząc po twoim kodzie każda inna będzie raczej za trudna. Najpierw opanuj allegro ;)

wracając do problemu
możesz na inną bitmapę przekopiować tylko część bitmapy ze sprite'ami która cię interesuje i ją obracać.
P-21169
« 1 »
  Strona 1 z 1