窗口没有出现在SDL2(C ++)中

时间:2018-01-20 05:19:31

标签: c++ sdl sdl-2

我最近使用SDL2在C ++中开始了一个游戏项目。我为Game创建了一个类,并包含一个init函数,它初始化SDL并创建一个窗口。我的代码通常符合0错误和警告。但是,当我运行可执行文件时,我无法终止程序,也不会出现窗口。

我的代码:

game.cc

#include "Game.hh"
#include <iostream>

using namespace std;

// Constructing Funtions
Game::Game()
{}

Game::~Game()
{}

// Initializing Function
void Game::init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen)
{
  int flags = 0;
  // Check to see if Fullscreen Mode has been called
  if(fullscreen)
    flags = SDL_WINDOW_FULLSCREEN;

  if(SDL_Init(SDL_INIT_EVERYTHING) == 1) {
    cout << "Initialization Complete" << endl;

    // Create the Window
    window = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
    // Create the Renderer
    renderer = SDL_CreateRenderer(window, -1, 0);
    if (renderer) {
      SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    }
    // Set Is Running to True
    isRunning = true;
  } else {
    isRunning = false;
  }
}

// Looping Funtions
void Game::eventHandler()
{
  // Initialize EventHandler & Get Event Type
  SDL_Event event;
  SDL_PollEvent(&event);

  // Process Events
  switch (event.type) {
  case SDL_QUIT:
    isRunning = false;
    break;
  default:
    break;
  }
}

void Game::update()
{}

void Game::render()
{
  // Clear Renderer
  SDL_RenderClear(renderer);
  // Render Shit
  SDL_RenderPresent(renderer);
}

void Game::clean()
{
  SDL_DestroyWindow(window);
  SDL_DestroyRenderer(renderer);
  SDL_Quit();

  cout << "Game Quit Successfuly" << endl;
}

bool Game::running()
{
  return isRunning;
}

Game.hh

#ifndef GAME_HH
#define GAME_HH
#include "SDL.h"


class Game {
public:
  // Constructor and Deconstructor
  Game();
  ~Game();

  // Initializing Functions
  void init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen);

  // Looping Commands
  void eventHandler();
  void update();
  void render();
  void clean();

  // Application Running Checker
  bool running();

private:
  bool isRunning;
  SDL_Window* window;
  SDL_Renderer* renderer;
};
#endif

最后是main.cc

#include <iostream>
#include "Game.hh"

Game *game = nullptr;

int main()
{
  game = new Game;

  game->init("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, false);

  do {
    game->eventHandler();
    game->update();
    game->render();
  } while(game->running());
  game->clean();
}

任何想法?

编辑:找到问题的解决办法,我让公共函数running返回私有isRunning变量。但是,现在问题是代码返回&#34; Game Quit Successfully&#34;没有发起任何事情......

0 个答案:

没有答案