c++ - 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;
};
解决方案
我猜这个
if (SDL_Init(SDL_INIT_EVERYTHING == 0)) {
这是一个错字
if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
推荐阅读
- javascript - Angular 2:计算动态生成的价格
- r - 如何在不下载到本地内存的情况下传播 tbl_dbi 和 tbl_sql 数据
- matlab - 在 Matlab 中模拟在水波中航行的船
- laravel - laravel中多对多关系中父表的相关记录
- angular - 角度 - 如何使用 setcustomvalidity 函数
- css - 无法在 Angular 6 中覆盖 Slick 轮播样式?
- c# - 后台工作人员更新 Gridview
- swift - 如何在 Xcode 10 中创建 MLImageClassifier
- exchange-server - 刺激收件人登录邮件交换服务器?
- react-native - 带有Tracker的react-native-meteor不必要地每秒重复订阅