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

[SDL] Problem z załadowaniem pliku BMP do tablicy dwuwymiarowej

Ostatnio zmodyfikowano 2013-03-13 17:55
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SDL] Problem z załadowaniem pliku BMP do tablicy dwuwymiarowej
» 2013-03-10 18:54:31
Witajcie , chciałem napisać grę "Statki" w SDL jednak już mam problem , bo wcale nie ładuje mi pliku BMP do programu , sprawdziłem sobie to łatwą komendą :
           
C/C++
if( !statki[ i ][ k ] )
{
    printf( "Unable to load bitmap: %s\n", SDL_GetError() );
    return 1;
}
I kiedy klikne to mnie wywala i zwraca jedynke , czyli że coś poszło nie tak , i te bitmapy się nie ładują . Tutaj cały kod źródłowy

C/C++
#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif

#include <SDL/SDL.h>
#include <iostream>
#include <ctime>
#include <sstream>
#include <string>

using namespace std;
SDL_Rect statek_Dane;

SDL_Rect statek_Cel;

int x;
int y;
const int ILOSC_STATKOW_X = 10;
const int ILOSC_STATKOW_Y = 10;
const int ILOSC_WSZYSTKICH_STATKOW = 100;
int mouseX, mouseY;
int random( int nMin, int nMax ) { return rand() % nMax + 1 + nMin; }
SDL_Surface * statki[ ILOSC_STATKOW_X ][ ILOSC_STATKOW_Y ];
const int wyso_Map = 1000;
const int szer_Map = 1000;
SDL_Surface * ekran = NULL;
SDL_Surface * przycisk_null = NULL;
SDL_Surface * przycisk_gracz_1 = NULL;
SDL_Surface * przycisk_gracz_2 = NULL;
SDL_Event zdarzenie;
SDL_Rect statek_1;
SDL_Rect statek_2;
SDL_Rect statek_null;
bool wyjscie = false;
int a = 50;
int b = 100;
int main( int argc, char ** argv )
{
    statek_Dane.w = 10;
    statek_Dane.h = 10;
    statek_Cel.x = 0;
    statek_Cel.y = 0;
   
    ekran = SDL_SetVideoMode( 1000, 1000, 32, SDL_SWSURFACE );
    przycisk_null = SDL_LoadBMP( "przycisk_null.bmp" );
    przycisk_gracz_1 = SDL_LoadBMP( "przycisk_gracz_1.bmp" );
    przycisk_gracz_2 = SDL_LoadBMP( "przycisk_gracz_2.bmp" );
   
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            statek_Cel.x = x;
            statek_Cel.y = y;
            if( zdarzenie.type == SDL_MOUSEMOTION )
            {
                mouseX = zdarzenie.motion.x;
                mouseY = zdarzenie.motion.y;
            }
            if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
            {
                for( int i = 0; i < ILOSC_STATKOW_Y; i++ )
                {
                    for( int k = 0; i < ILOSC_STATKOW_X; i++ )
                    {
                        statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null" );
                        if( !statki[ i ][ k ] )
                        {
                            printf( "Unable to load bitmap: %s\n", SDL_GetError() );
                            return 1;
                        }
                    }
                }
               
                if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
                {
                    if( zdarzenie.button.button == SDL_BUTTON_LEFT )
                    {
                        for( int i = 0; i < ILOSC_STATKOW_Y; i++ )
                        {
                           
                            x += 10;
                            y += 10;
                            for( int k = 0; k < ILOSC_STATKOW_X; k++ )
                            {
                                SDL_BlitSurface( statki[ i ][ k ], NULL, ekran, & statek_Cel );
                            }
                        }
                    }
                }
            }
        }
       
    }
   
}
, naprawde bardzo proszę o pomoc , chciałbym dzisiaj dokończyć to pokazywanie tych statków jeszcze dzisiaj.
P-78062
SeaMonster131
» 2013-03-10 18:57:45
statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null" );
Nie ma rozszerzenia pliku.
P-78064
domin568
Temat założony przez niniejszego użytkownika
» 2013-03-10 19:10:59
Haha :P Ale głupi błąd , że ja tego nie zauważyłem , jednak gdy w SDL_BlitSurface wpisze statki[0][0]tak dla sprawdzenia czy wogóle coś się pokaże to gdy klikne myszką to się nic nie dzieje . Czemu >?? mógłby ktoś naprowadzić ?? Wiem Ze cos z tym ostatnim sfagmentem skopałem ale nie wiem jak to naprawic .
P-78066
pekfos
» 2013-03-10 19:30:27
Zasoby ładujesz w pętli głównej i nie widać, żebyś je gdziekolwiek zwalniał. Ten kod do jeden wielki wyciek pamięci. W paru miejscach widać, że nie wiesz co robisz, a niektóre fragmenty chyba zostały skądś skopiowane..
P-78070
domin568
Temat założony przez niniejszego użytkownika
» 2013-03-10 22:45:06
Może rzucać się na głęboką wodę , ale czy ktoś mógłby mnie jakoś naprowadzic ?? @pefkos ja wiem ze tutaj niektóre linijki są bez sensu , masz racje , optymalizacja kodu tez jest zerowa , jednak te elementy można dopasować pózniej , większość błędów jest z mojej bezradności i niewiedzy , ale na tyle o ile potrafiłem tyle napisałem , więc od tego jest forum żeby sobie pomagać :) Mógłby ktoś chociaż dać jakaś "złotą myśl" ???
P-78087
domin568
Temat założony przez niniejszego użytkownika
» 2013-03-11 18:56:44
Ok , naprawiłem , i to co chciałem to działa :) , może dlatego tak lamiłem bo pisałem jak byłem zmęczony :) Kod jeżeli komuś pomoże :) :

C/C++
#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif

#include <SDL/SDL.h>
#include <iostream>
#include <ctime>
#include <sstream>
#include <string>

using namespace std;
SDL_Rect statek_Dane;

SDL_Rect statek_Cel;

int x;
int y;
const int ILOSC_STATKOW_X = 10;
const int ILOSC_STATKOW_Y = 10;
const int ILOSC_WSZYSTKICH_STATKOW = 100;
int mouseX, mouseY;
int random( int nMin, int nMax ) { return rand() % nMax + 1 + nMin; }
SDL_Surface * statki[ ILOSC_STATKOW_X ][ ILOSC_STATKOW_Y ];
const int wyso_Map = 1000;
const int szer_Map = 1000;
SDL_Surface * ekran = NULL;
SDL_Surface * przycisk_null = NULL;
SDL_Surface * przycisk_gracz_1 = NULL;
SDL_Surface * przycisk_gracz_2 = NULL;
SDL_Event zdarzenie;
SDL_Rect statek_1;
SDL_Rect statek_2;
SDL_Rect statek_null;
bool wyjscie = false;
int a = 50;
int b = 100;
int main( int argc, char ** argv )
{
    statek_Dane.w = 100;
    statek_Dane.h = 100;
    statek_Cel.x = 0;
    statek_Cel.y = 0;
   
    ekran = SDL_SetVideoMode( 1000, 1000, 32, SDL_SWSURFACE );
    przycisk_null = SDL_LoadBMP( "przycisk_null.bmp" );
    przycisk_gracz_1 = SDL_LoadBMP( "przycisk_gracz_1.bmp" );
    przycisk_gracz_2 = SDL_LoadBMP( "przycisk_gracz_2.bmp" );
   
    while( !wyjscie )
    {
        while( SDL_PollEvent( & zdarzenie ) )
        {
            statek_Cel.x = x;
            statek_Cel.y = y;
            if( zdarzenie.type == SDL_MOUSEMOTION )
            {
                mouseX = zdarzenie.motion.x;
                mouseY = zdarzenie.motion.y;
            }
            if( zdarzenie.type == SDL_MOUSEBUTTONDOWN )
            {
                for( int i = 0; i < ILOSC_STATKOW_Y; i++ )
                {
                    for( int k = 0; i < ILOSC_STATKOW_X; i++ )
                    {
                        statki[ i ][ k ] = SDL_LoadBMP( "przycisk_null.bmp" );
                        if( !statki[ i ][ k ] )
                        {
                            printf( "Unable to load bitmap: %s\n", SDL_GetError() );
                            return 1;
                        }
                    }
                   
                }
               
               
                if( zdarzenie.button.button == SDL_BUTTON_LEFT )
                {
                    for( int i = 0; i < ILOSC_STATKOW_X; i++ )
                    {
                        x += 10;
                       
                       
                       
                        for( int k = 0; k < ILOSC_STATKOW_X; k++ )
                        {
                            SDL_BlitSurface( statki[ i ][ k ], NULL, ekran, & statek_Cel );
                        }
                       
                    }
                   
                    for( int i = 0; i < ILOSC_STATKOW_X; i++ )
                    {
                        if( x == 1000 )
                        {
                            x = 0;
                            y += 100;
                        }
                    }
                    SDL_Flip( ekran );
                }
               
            }
        }
    }
}
P-78118
domin568
Temat założony przez niniejszego użytkownika
» 2013-03-12 18:54:16
Ok , jednak znowu mam problem , no bo jak można by stworzyć losowanie w tablicy dwuwymiarowej ?? w "czystym" c++ wiedziałbym jak to zrobić jednak w SDL nie jestem pewien , mógłby ktoś pomoć jak wylosować jakąś wartość ?? , chodzi o to że na początku ładuje zwykłe kafelki , potem kafelki (losowe) przeciwnika (statki) , i drugiego przeciwnika . Potem z wybieraniem to sobie chyba poradze ale jak zrobić losowanie gdzie będą te ukryte statki przeciwnika ??? Szczerze liczę na pomoc :)
P-78164
domin568
Temat założony przez niniejszego użytkownika
» 2013-03-13 17:16:15
Naprawdę nikt nie ma pomysłu ??? Jestem początkujący i trochę trudno mi to idzie ,więc byłbym wdzięczny za rozjasnienie tego : ) Z góry dzięki za pomoc .
P-78231
« 1 » 2
  Strona 1 z 2 Następna strona