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

Problem z obiektowym pisaniem SDL

Ostatnio zmodyfikowano 2013-03-25 20:50
Autor Wiadomość
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

C/C++
#include <SDL.h>
#include <SDL_ttf.h>
#include "SDL_Help.h"

int main( int argc, char * args[] )
{
    SDL_Surface * ekran = NULL; // Ekran glowny //
    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 ) ) // Inicjalizujemy SDL //
    {
        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

C/C++
#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
P-79327
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 :
C/C++
if( init.inicjalizacja_SDL( 800, 600, 32, ekran ) == - 1 ) // Inicjalizujemy SDL
Problem powinien być rozwiązany , Ja nigdy nie pisałem obiektowo więc myśle że to powinno pomoć :)
P-79329
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 :)
P-79330
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 !
P-79350
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
P-79360
RazzorFlame
» 2013-03-25 17:59:32
C/C++
if( !init.inicjalizacja_SDL( 800, 600, 32, & ekran ) ) // Inicjalizujemy SDL
Ekran prześlij przez referencje.
P-79363
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 *.
P-79364
pekfos
» 2013-03-25 19:29:38
To było do przewidzenia ;)
C/C++
bool SDL_Help::inicjalizacja_SDL( int szer, int wys, int gk, SDL_Surface *& ekran ) //dodane &
(zmień tylko tą linię)
P-79375
« 1 » 2
  Strona 1 z 2 Następna strona