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

[SDL, C++] Program nie wyświetla bitmapy

Ostatnio zmodyfikowano 2010-07-04 11:45
Autor Wiadomość
skovv
Temat założony przez niniejszego użytkownika
[SDL, C++] Program nie wyświetla bitmapy
» 2010-07-03 21:10:23
WItam.Mam pewien problem: Uczę się SDL z poradnika na tej stronie i nie wyświetla mi obrazka ;/ mam kod:
**main.cpp**
C/C++
#include "PolSDeL.h"
SDL_Surface * obraz = NULL;
SDL_Surface * text = NULL;
SDL_Rect spr[ 1 ];
SDL_Rect tspr[ 1 ];
int main( int argc, char * args[] )
{
    //URUCHOMIENIE
    pl_wlacz( "PolSDeL - BY Skovv" ); //uruchomia SDL
    pl_tworz_okno( 640, 480, 32 ); //Tworzy okno SDL
    //GRAFIKA
    spr[ 0 ].x = 0;
    spr[ 0 ].y = 50;
    spr[ 0 ].w = 0;
    spr[ 0 ].h = 50;
    spr[ 1 ].x = 50;
    spr[ 1 ].y = 100;
    spr[ 1 ].w = 0;
    spr[ 1 ].h = 50;
   
    tspr[ 0 ].x = 100;
    tspr[ 0 ].y = 100;
    tspr[ 1 ].x = 500;
    tspr[ 1 ].y = 100;
   
    pl_wczytaj_bmp( obraz, "lol.bmp" );
    pl_wczytaj_bmp( text, "tx.bmp" );
    pl_wyswietl_bmp( obraz, NULL, NULL );
    pl_wyswietl_bmp( text, & spr[ 0 ], & tspr[ 0 ] );
    pl_wyswietl_bmp( text, & spr[ 1 ], & tspr[ 1 ] );
   
    pl_wylaczanie_krzyzykiem();
    pl_wylacz();
   
    pl_zwolnij_bmp( obraz );
    pl_zwolnij_bmp( text );
    return 0;
}

**PolSDeL.h**
C/C++
/*
KOD BY Skovv

Wszelkie prawa zastrzezone
*/
#include <SDL/SDL.h>
SDL_Surface * ekran = NULL;
SDL_Event zdarzenie;
bool wyjscie = false;
void pl_wlacz( char * tytul )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_WM_SetCaption( tytul, NULL );
}
void pl_wylacz()
{
    SDL_Quit();
}
void pl_tworz_okno( int w, int h, int glebia_kolorow )
{
    ekran = SDL_SetVideoMode( w, h, glebia_kolorow, SDL_SWSURFACE );
    pl_akt( ekran );
}
void pl_akt( SDL_Surface * poww )
{
    SDL_Flip( poww );
}
void pl_pauza( int czas )
{
    SDL_Delay( czas );
}
void pl_wylaczanie_krzyzykiem()
{
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            if( zdarzenie.type == SDL_QUIT )
            {
                wyjscie = true;
            }
        }
    }
}
//BITMAPY
void pl_wczytaj_bmp( SDL_Surface * obrazek, char * sciezka )
{
    obrazek = SDL_LoadBMP( sciezka );
}
void pl_wyswietl_bmp( SDL_Surface * obr, SDL_Rect * poz, SDL_Rect * poz2 )
{
    SDL_BlitSurface( obr, poz, ekran, poz2 );
}
void pl_zwolnij_bmp( SDL_Surface * obrazek )
{
    SDL_FreeSurface( obrazek );
}
Będę wdzięczny za pomoc
P-18571
DejaVu
» 2010-07-03 21:43:18
1) Plik nie istnieje pod podaną ścieżką (np. inny katalog roboczy niż miejsce pliku exe).
2) Plik z grafiką nie został załadowany ponieważ jest uszkodzony - powstał np. poprzez zmianę nazwy pliku i w rzeczywistości posiada inny format danych, którego biblioteka nie obsługuje.
3) Grafika wczytała się prawidłowo ale nie jest wyświetlana na ekranie.

/edit:
Ostro... SDL w języku polskim?? WTF is that :)
P-18572
kamillo121
» 2010-07-03 22:11:37
Z tym wczytaniem obrazka to nie jest tak do końca , fakt tak nie działa ale jak dasz 
np 
C/C++
void load( SDL_Surface *( & surf ), char * src )
{
    surf = SDL_LoadBMP( src );
}
to zadziała :)
Poza tym przepisywanie funkcji to  działanie co najmniej bezsensowne

//edit
albo
C/C++
SDL_Surface * load( char * filename )
{
    SDL_Surface * surf = SDL_LoadBMP( filename );
    surf = SDL_DisplayFormat( surf );
    return surf;
}
ale to bez sensu bo przecież to robi funkcja loadmp

P-18573
malan
» 2010-07-03 22:33:09
Chcą zmodyfikować wskaźnik w funkcji musisz przesłać jego adres.
C/C++
void pl_wczytaj_bmp( SDL_Surface ** obrazek, char * sciezka )
{
    ( * obrazek ) = SDL_LoadBMP( sciezka );
}
Przykładowe wywołanie:
C/C++
pl_wczytaj_bmp( & bitmapa, "myFoo.jpg" );
Nie jestem pewny, czy to o to chodzi, ale spróbować nie zaszkodzi :).
P-18574
lenrokskate
» 2010-07-03 23:05:10
a nie lepiej normalnie referencją?
P-18576
Elaine
» 2010-07-04 00:56:47
Tja, potem się domyślaj na podstawie wywołania, czy przekazujesz wartość, czy odniesienie do obiektu. W przypadku wskaźników doskonale to widać. W przypadku referencji już nie bardzo.

W tym zresztą przypadku najlepiej by było zwrócić wartość "po bożemu", zamiast kombinować ze wskaźnikami czy referencjami...
P-18580
skovv
Temat założony przez niniejszego użytkownika
» 2010-07-04 10:03:35
a mam jeszcze 1 pytanie: jak zwrócić uchwyt utworzonego okna SDL?
P-19425
malan
» 2010-07-04 11:45:44
C/C++
SDL_Surface * LoadBitmap( const char * bmpName )
{
    return SDL_LoadBMP( bmpName );
};
Nie jestem pewny, czy zadziała.
P-19430
« 1 »
  Strona 1 z 1