Окно SDL мгновенно закрывается - PullRequest
0 голосов
/ 14 марта 2019

Я следовал учебному пособию по YouTube, как начать работу с SDL, и мой текущий прогресс, кажется, пропускает мои handleEvents, обновляет и отображает функции и просто очищает и закрывает окно.

Main.cpp

#include "main.h"

using namespace std;

SDLMain* sdlwindow = nullptr;

int main(int argc, char *args[])
{
    sdlwindow = new SDLMain();
    sdlwindow->init("PLS - Partikel & Lyd System", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, false);

    while (sdlwindow->online()) {
        sdlwindow->handleEvents();
        sdlwindow->update();
        sdlwindow->render();
    }

    sdlwindow->clean();
    return 0;
}

SDLMain.cpp

#include "SDLmain.h"

SDLMain::SDLMain(){}
SDLMain::~SDLMain(){}
void SDLMain::init(const char* TITLE, int XPOS, int YPOS, int WIDTH, int HEIGHT, bool FULLSCREEN){

    int FLAGS = 0;
    if (FULLSCREEN) {
        FLAGS = SDL_WINDOW_FULLSCREEN;
    }

    if (SDL_Init(SDL_INIT_EVERYTHING == 0)) {

        window = SDL_CreateWindow(TITLE, XPOS, YPOS, WIDTH, HEIGHT, FLAGS);
        if (window) {
            std::cout << "SDL Window was successfully created!" << std::endl;
        }
        else {
            std::cout << "SDL Window failed. SDL Error: " << SDL_GetError() << std::endl;
        }

        renderer = SDL_CreateRenderer(window, -1, 0);
        if (renderer) {
            SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
            std::cout << "SDL Renderer was successfully created!" << std::endl;
        }
        else {
            std::cout << "SDL Renderer failed. SDL Error: " << SDL_GetError() << std::endl;
        }

        isOnline = true;
    }
    else {
        isOnline = false;
    }
}

void SDLMain::handleEvents() {
    SDL_Event event;
    SDL_PollEvent(&event);

    switch (event.type) {
    case SDL_QUIT:
        isOnline = false;
        break;

    default:
        break;
    }
}
void SDLMain::update(){}
void SDLMain::render(){
    SDL_RenderClear(renderer);
    //Add stuff to render
    SDL_RenderPresent(renderer);
}
void SDLMain::clean(){
    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);
    SDL_Quit();
    std::cout << "SDL System cleaned!" << std::endl;
}

SDLMain.h

#pragma once
#include <iostream>
#include <stdio.h>
#include <SDL.h>

class SDLMain {
public:
    SDLMain();
    ~SDLMain();

    void init(const char* TITLE, int XPOS, int YPOS, int WIDTH, int HEIGHT, bool FULLSCREEN);
    void handleEvents();
    void update();
    void render();
    void clean();

    bool online() {
        return isOnline;
    }

private:
    bool isOnline;
    SDL_Window* window;
    SDL_Renderer* renderer;
};

1 Ответ

2 голосов
/ 14 марта 2019

Я предполагаю, что это

if (SDL_Init(SDL_INIT_EVERYTHING == 0)) {

является опечаткой для этого

if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
...