使用SDL2并为许多其他项目创建可重用的“引擎”

时间:2019-06-07 00:48:10

标签: c++ visual-studio sdl sdl-2

我不确定SDL2在做什么,但我在读它主要是“劫持”。

我有一个名为CoolGame的项目,还有一个我想在我制作的许多其他游戏中可以重用的项目,名为Engine

  

这是我的引擎。cpp

#include "engine.h"
using namespace engine;

Engine::Engine()
{
    window = NULL;
    renderer = NULL;
}

Engine::Engine(const char* title)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 400, SDL_WINDOW_SHOWN);
    renderer = SDL_CreateRenderer(window, -1, 0);
}

void Engine::RenderThisFrame()
{
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

    SDL_RenderClear(renderer);

    SDL_RenderPresent(renderer);
}

有些人可能会看到我要去的地方。我正在尝试为sdl2做一个不错的Game Engine包装器。这是我在coolgame

中的主要内容
#include "engine.h"
#include <iostream>
#undef main
using namespace std;
using namespace engine;

int main(int argc, const char* argv[]) {
    cout << "break main." << endl;
    Engine e = Engine("title");

    e.RenderThisFrame();
    return 0;
}

这不起作用。我还尝试了#undef中的engine.h,但收到与以下相同的错误。 LNK2019 unresolved external symbol _SDL_main referenced in function _main_utf8

当我拿SDL.h并将其直接放在coolgame中时,它会按预期工作。

总有办法阻止SDL2劫持main吗?还是有什么办法可以将主要劫持提升到coolgame项目?如果有话

为了节俭,这里是

  

engine.h

#ifndef ENGINE_CODE
#define ENGINE_CODE

#include "SDL.h"
#undef main
namespace engine {
    class Engine {
    public:
        Engine();
        Engine(const char* title);

        void RenderThisFrame();
    private:
        SDL_Window* window;
        SDL_Renderer* renderer;
    };
}
#endif

编辑

如果这很重要,我正在使用Visual Studio 2019作为我的IDE,如果需要,我可以提供C ++构建工具版本。

编辑

我不相信另一个问题可以完全回答这个问题。这就是为什么。

我添加了SDL_MAIN_HANDLED并删除了#undefine main,但它仍然无法正常工作。

然后我将所有引擎代码移至coolgame项目中,并且按预期运行,并且主要运行。瞧,它起作用了,这与所引用的项目有关。因此,这不能解决我的原始问题。我正在添加Visual Studio标签。these are all errors. 我已经将engine文件夹添加到SDL_MAIN_HANDLED的包含目录中,并且还已经将coolgame添加到包含目录

0 个答案:

没有答案