Autor Wątek: Kilka podstawowych pytań - SDL  (Przeczytany 1089 razy)

Offline xardas97260

  • Użytkownik

# Kwiecień 28, 2011, 22:02:52
Witam. Oto kod (tak, wiem że jest z tutoriala o SDL'u):
#include <SDL.h>
SDL_Surface * ekran = NULL;
SDL_Surface * ludek = NULL;
SDL_Event zdarzenie;
SDL_Rect LudekDestination;
int x;
bool wyjscie = false;
int main( int argc, char * args[] )
{
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    ludek = SDL_LoadBMP( "ludek.bmp" );
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
            if( zdarzenie.type == SDL_KEYDOWN )
            {
                switch( zdarzenie.key.keysym.sym )
                {
                case SDLK_RIGHT:
                    x++;
                    break;
                }
            }
        }
        LudekDestination.x = x;
        SDL_BlitSurface( ludek, NULL, ekran, & LudekDestination );
        SDL_Flip( ekran );
    }
    SDL_FreeSurface( ludek );
    SDL_Quit();
    return 0;
}
I teraz mam 4 pytania:
1. Jak zrobić animację tego ludka, lecz działającej na zasadzie że ludek.bmp to ludek który stoi, ludek1.bpm, ludek2.bmp, ludek3.bmp to kolejne animacje ruchu, np. że podnosi się noga, przesuwa, i opada.
2. Jest problem, bo gdy wciskam klawisz to ludek porusza się o 1 piksel w prawo (tzn o jeden piksel na jedną linię poziomą obrazku). Jak zrobić, by poprostu ludek przesuwał się i szybciej, i żeby szedł cały czas, dopiero jak puścimy klawisz to przestaje się przesuwać.
3. I proste, banalne wręcz pytanie. Jak zrobić jakieś tło? Tzn wiem, trzeb załadować kolejną bitmapę, ale jak ją wyświetlić jako background?
4. No i 4 pytanie. Jak wyświetlić bitmapę obok ludek.bmp? Tzn. np. gdybym chciał zrobić że np. leci kolesiowi kre w brzucha. Przypuśćmy że krew i jej animacja to krew.bmp i krew1.bmp. Jak wyświetlić tą bitmapę obok kolesia, czyli ludek.bmp

Wiem, że te pytania to absolutne podstawy, i że na niektóre są już odpowiedzi. Lecz, wiele z nich ma niezbyt zrozumiałe dla mnie własne funkcje, itp. I dlatego tutaj się pytam, bo pewnie dla kogoś kto zna SDL'a to jest to banalna sprawa. Dzięki z góry

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

# Kwiecień 28, 2011, 22:19:18
1. Jak zrobić animację tego ludka, lecz działającej na zasadzie że ludek.bmp to ludek który stoi, ludek1.bpm, ludek2.bmp, ludek3.bmp to kolejne animacje ruchu, np. że podnosi się noga, przesuwa, i opada.
Przede wszystkim, lepiej wszystkie klatki animacji trzymać w jednym pliku (kilka położonych koło siebie w jednym rzędzie, wszystkie tego samego rozmiaru). W obiekcie ludka trzymasz SDL_Rect gdzie za x,y dajesz pozycję pierwszej klatki (0,0) a za w,h szerokość i wysokość pojedynczej klatki. Co pewien czas do x dodajesz szerokość sprite'a tak by wskazywał na kolejną klatkę. Gdy x wyjdzie za ostatnią klatkę, ustawiasz na 0.

Offline xardas97260

  • Użytkownik

# Kwiecień 28, 2011, 22:32:07
Czyli jednym słowem to co jest opisane tutaj: http://cpp0x.pl/kursy/Kurs-SDL-C++/Troche-wiecej-o-sprite-039-ach/97

?
Ok, dzięki, a co z pozostałymi pytaniami :P :D?

Offline Lerhes

  • Użytkownik

# Kwiecień 29, 2011, 03:20:15
Powinieneś od razu do POL polecieć. Jak sam napisałeś, to podstawy podstaw. Co chcesz? Żeby ktoś tutoriala Ci pisał? Linijka po linijce? Masz trzy wyjścia z tej sytuacji: albo ktoś z forum przedstawi Ci przykładowy kod (i tak prawdopodobnie go trudno będzie Ci zastosować) -> to nie będę ja. Opcja druga, sam to sobie napiszesz: to bardzo łatwe jest -> wyświetlasz po prostu klatki animacji jedna po drugiej w założonym czasie je zmieniając. Opcja trzecia, nauczysz się angielskiego/skorzystasz z google translatora i przeczytasz to co każdy nie leniwy robi na twoim miejscu, czyli to:
http://lazyfoo.net/SDL_tutorials/index.php
Masz wszystko, od kolizji i poruszania z zadaną prędkością do animacji. Jest nawet o tle i jego przesuwaniu.
Twój wiek / doświadczenie (początki) nie jest żadnym usprawiedliwieniem, ludzie nie będą wszystkiego robić za Ciebie.
Zawsze miły i pełen cnót:
Lerhes

Offline xardas97260

  • Użytkownik

# Kwiecień 29, 2011, 09:14:20
Z angielskim problemów nie mam żadnych, więc poczytam tegoi tutka. Dzięki za link.