Probleme mit SDL



  • Aloha

    ich versuche mich seit kurzem an SDL2, habe auch alles eingerichtet und die Test Programme erstellt, klappt alles soweit, nur bei meinem kleinen eigenen Projekt habe ich leichte Probleme, das fenster schließt sofort sobald ich das Programm kompiliere. Irgendwelche Ratschläge?

    //Main.cpp
    #include <iostream>
    #include <SDL.h>
    #include <SDL_image.h>
    #include "common.h"
    
    int main(int argc, char *argv[])
    {
    	GameCommon NewGame;
    	NewGame.Erstellung();
    	NewGame.SpieleStatusCheck();
    	return 0;
    
    }
    
    //Commons.cpp
    #include <string>
    #include <iostream>
    #include <SDL.h>
    #include <SDL_image.h>
    #include "common.h"
    
    using namespace std;
    
    void GameCommon::Erstellung(){
    	SpieleStatus = "Title";	
    }
    
    void GameCommon::SpieleStatusCheck()
    {
    
    	if (SpieleStatus == "Title")
    	{
    		cout << "Ab ins Titelmenü" << endl;
    		SDL_Surface * image = IMG_Load("image.jpg");
    		SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer,image);
    		SDL_RenderCopy(renderer, texture, NULL, NULL);
    		SDL_RenderPresent(renderer);
    
    		while (!quit)
    		{
    			SpieleStatus = "Beenden";
    			break;
    
    		}
    
    		SDL_Init(SDL_INIT_VIDEO);
    
    	}
    	if (SpieleStatus == "Quit")
    	{
    		cout << "Beenden" << endl;
    	}
    	if (SpieleStatus == "NewGame")
    	{
    		cout << "Ein Neues Abendteuer wartet" << endl;
    	}
    }
    
    //common.h
    #pragma once
    
    #include <string>
    #include <iostream>
    #include <SDL.h>
    #include <SDL_image.h>
    #include "common.h"
    
    #ifndef common_h
    #define common_h
    
    class GameCommon
    {
    private:
    	SDL_Window* HauptFenster = SDL_CreateWindow("SDL2 Displaying Image",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    	SDL_Event event;
    	SDL_Renderer* renderer = SDL_CreateRenderer(HauptFenster, -1, 0);
    public:
    	std::string SpieleStatus;
    	void Erstellung();
    	void SpieleStatusCheck();
    	void SpieleTitelBildSchirm();
    	bool quit = false;
    	int TitleMenuOption;
    
    };
    
    #endif
    


  • Wo ist denn die SDL Event Loop?

    PS: Den "SpieleStatus" solltest du über ein Enum realisieren, nicht mittels Strings.

    Und die "SDL_CreateWindow" und "SDL_CreateRenderer"-Aufrufe solltest du auch nicht direkt im Header aufrufen, sondern am besten im Konstruktor.