fers334 Temat założony przez niniejszego użytkownika |
Problem z obiektowym pisaniem SDL » 2013-03-24 18:59:55 Siemka mam problem nie wiem dlaczego gdy tworze strukturę odpowiedzialna za inicjalizacje SDL to powstaje bład a mianowicie program sie zatrzymuje przy probie wyswietlenia ekranu. Poniżej zamieszczam kod programu : Main.cpp #include <SDL.h> #include <SDL_ttf.h> #include "SDL_Help.h"
int main( int argc, char * args[] ) { SDL_Surface * ekran = NULL; SDL_Event zdarzenie; SDL_Surface * postac = NULL; postac = SDL_LoadBMP( "postac.bmp" ); SDL_Rect postac_dane; postac_dane.h = 69; postac_dane.w = 47; postac_dane.x = 0; postac_dane.y = 0; SDL_Rect postac_gdzie; postac_gdzie.x = 400; postac_gdzie.y = 300; if( !init.inicjalizacja_SDL( 800, 600, 32, ekran ) ) { SDL_Quit(); return 1; } bool koniec = false; while( !koniec ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { koniec = true; } } SDL_BlitSurface( postac, 0, ekran, & postac_gdzie ); SDL_Flip( ekran ); } SDL_Quit(); return 0; } SDL_Help.h #include <SDL.h> #include <SDL_ttf.h>
struct SDL_Help { bool inicjalizacja_SDL( int szer, int wys, int gk, SDL_Surface * ekran ); }; SDL_Help init;
bool SDL_Help::inicjalizacja_SDL( int szer, int wys, int gk, SDL_Surface * ekran ) { if( SDL_Init( SDL_INIT_EVERYTHING ) == - 1 ) { return false; } ekran = SDL_SetVideoMode( szer, wys, gk, SDL_SWSURFACE | SDL_RESIZABLE ); if( ekran == NULL ) { return false; } if( TTF_Init() == - 1 ) { return false; } SDL_WM_SetCaption( "PROGRAM", NULL ); return true; } Prosze o odpowiedz. Z gory dzieki |
|
domin568 |
» 2013-03-24 19:36:29 Bardzo często popełniany błąd , gdy się pisze w SDL i zwraca wartości w Bool , bo gdy ty to inicjalizujesz to operator negacji ! zmienia to na false , więc zawsze będzie nieprawdziwe , zmień na to : if( init.inicjalizacja_SDL( 800, 600, 32, ekran ) == - 1 )
Problem powinien być rozwiązany , Ja nigdy nie pisałem obiektowo więc myśle że to powinno pomoć :) |
|
fers334 Temat założony przez niniejszego użytkownika |
» 2013-03-24 20:05:47 Niestety nic to nie dało. Mimo to czemu pierwszy zapis był błedny jesli zwracam wartosc bool to ta wartosc zostanie zanegowana czy li 1 = 0 , 0 = 1. Negowana jest przecież wartość calego wyrażenia a nie samo wyrażenie.
Ale dzięki za odpowiedz.
Sprawa nadal nie rozwiązana proszę o pomoc :) |
|
fers334 Temat założony przez niniejszego użytkownika |
» 2013-03-25 16:43:11 Nie wiem dlaczego ale ten błąd pojawia się tylko wtedy gdy przesyłam jako argument wskaźnik do powierzchni. Ale nie wiem właśnie dlaczego skoro wysyłanie wskaźników do funkcji jest mi dobrze znane , wiec nie wiem gdzie popełniam błąd chyba że SDL ma problem z takim wysyłaniem wskaźników nawet do zwykłych nie składowych funkcji.
Proszę o pomoc ! |
|
domin568 |
» 2013-03-25 17:44:49 Napewno ci ktos pomoze jak mu wyjasnisz wszystko , a nie tak pobieżnie piszesz nie wiadomo co do czego , Napisz kawałek kodu , swoje przemyślenia a my postaramy się ci pomóc
|
|
RazzorFlame |
» 2013-03-25 17:59:32 if( !init.inicjalizacja_SDL( 800, 600, 32, & ekran ) )
Ekran prześlij przez referencje. |
|
fers334 Temat założony przez niniejszego użytkownika |
» 2013-03-25 18:02:38 Nie mogę zrobić tak jak pisałeś if( !init.inicjalizacja_SDL( 800, 600, 32, &ekran ) )
ponieważ kompilator wyświetla powiadomienie ze nie może skonwertować z SDL_Surface ** na SDL_Surface *.
|
|
pekfos |
» 2013-03-25 19:29:38 To było do przewidzenia ;) bool SDL_Help::inicjalizacja_SDL( int szer, int wys, int gk, SDL_Surface *& ekran )
(zmień tylko tą linię) |
|
« 1 » 2 |