首页 > 解决方案 > SDL 窗口立即关闭

问题描述

我遵循了关于如何开始使用 SDL 的 youtube 教程,我目前的进度似乎跳过了我的 handleEvents、更新和渲染功能,只是清除并关闭了窗口。

主文件

#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;
};

标签: c++sdl

解决方案


我猜这个

if (SDL_Init(SDL_INIT_EVERYTHING == 0)) {

这是一个错字

if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {

推荐阅读