J'ai essayé de créer un Game State System, j'ai créé la classe window et une fonction MainLoop dans mon GameState, au début je croyais que c'était parce que la boucle n'était pas en main, mais le même résultat .La fenêtre SDL se ferme après ouverture
Window.cpp:
#include "Window.h"
using namespace std;
Window::Window(char* title, int width, int height, Uint32 flags)
{
if (SDL_Init(SDL_INIT_EVERYTHING))
{
cerr << "SDL failed to init: " << SDL_GetError() << endl;
throw;
}
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
window = SDL_CreateWindow("DirtyCraft", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags);
if (window == NULL)
throw;
context = SDL_GL_CreateContext(window);
GLenum error = glewInit();
if (error != GLEW_OK)
{
cerr << "Glew: " << glewGetErrorString(error) << endl;
throw;
}
}
Window::~Window()
{
SDL_DestroyWindow(window);
SDL_Quit();
}
Window.h:
#pragma once
#include <iostream>
#include <SDL.h>
#define GLEW_STATIC
#include <GL/glew.h>
class Window
{
public:
Window(char* title, int width, int height, Uint32 flags);
~Window();
SDL_Window *window;
SDL_GLContext context;
};
Et main.cpp où est la boucle:
#include <iostream>
#include <SDL.h>
#define GLEW_STATIC
#include <GL/glew.h>
#include "Window.h"
#include "MainGame.h"
using namespace std;
#define WIDTH 640
#define HEIGHT 480
int main(int argc, char* argv[])
{
Window window("DirtyCraft", WIDTH, HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI);
//MainGame MainGame(window);
//MainGame.MainLoop();
while (true)
{
SDL_Event E;
if (SDL_PollEvent(&E))
{
if (E.type == SDL_QUIT);
break;
}
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.15f, 0.5f, 0.5f, 1.0f);
SDL_GL_SwapWindow(window.window);
}
window.~Window();
return 0;
}
Alors w voici le problème? Je suis assez sûr qu'il y a un détail qui me manque ...
Vous ne devriez pas appeler le destructeur 'Window' explicitement, cela se produira automatiquement quand l'objet' window' est détruit quand il sort de sa portée quand 'main' revient. –
En ce qui concerne votre problème, pouvez-vous élaborer un peu dessus? Ça va bien, sans avertissements? Que se passe-t-il lorsque vous exécutez votre programme? Que se passe-t-il si vous parcourez le code dans un débogueur, fait-il tout ce que vous attendez de lui? –