我不确定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标签。
我已经将engine文件夹添加到SDL_MAIN_HANDLED
的包含目录中,并且还已经将coolgame
添加到包含目录