繁体   English   中英

如何在不留下未解决的外部问题的情况下在 Box2D 中创建一个世界

[英]How to create a World in Box2D without leaving Unresolved Externals

我一直在研究 2D 物理引擎,然后出现了 Box2D。 我一直在阅读它并尝试进行设置,但遇到了问题。

  1. 使用 premake5 创建构建
  2. 打开一个新的 Visual Studio 2019 项目
  3. 将 Additional Include Directory 设置为 Box2D header 文件夹
  4. 将附加库目录(在链接器下)设置为包含 lib 文件 (Box2D.lib) 的文件夹
  5. 将附加依赖项设置为 Box2D.lib

完成这一切后,我似乎能够毫无问题地调用和创建 Box2d 变量和函数。 但是当我试图建立一个世界时,它开始导致错误。

错误

LNK1120 2 unresolved externals          

LNK2019 unresolved external symbol "public: __thiscall b2World::b2World(struct b2Vec2 const &)" (??0b2World@@QAE@ABUb2Vec2@@@Z) referenced in function "public: void __thiscall Game::run(void)" (?run@Game@@QAEXXZ)                

LNK2019 unresolved external symbol "public: __thiscall b2World::~b2World(void)" (??1b2World@@QAE@XZ) referenced in function "public: void __thiscall Game::run(void)" (?run@Game@@QAEXXZ)       

我正在设置的项目是尝试将 SFML 与 Box2d 结合使用。 在生成的文件夹中运行测试台是可行的,但我正在尝试弄清楚如何在需要时将引擎移植到其他项目中。 该解决方案按预期工作。 但是一旦创建了世界变量,它就会产生错误。

但是创建和设置 b2Vec2 和 b2BodyDef 变量不会导致任何问题。 我不太确定是什么原因,我在网上浏览了各种指南,检查了路径是否正确并重新生成了库文件。

我怀疑问题是 Box2D 配置为在 x64 中构建,而我的项目是在 x86 中构建。 我想知道是否有人知道在 x86 或类似的环境中运行 Box2D 的方法。

代码

void Game::run()
{
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    sf::Time timePerFrame = sf::seconds(1.f / 60.f); // 60 fps
    b2Vec2 gravity(0.0f, -10.0f);


    b2World myWorld = b2World(gravity); //The errors are cause by this line.

    // Define the ground body.
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0.0f, -10.0f);



    while (m_window.isOpen())
    {
        processEvents(); // as many as possible
        timeSinceLastUpdate += clock.restart();
        while (timeSinceLastUpdate > timePerFrame)
        {
            timeSinceLastUpdate -= timePerFrame;
            processEvents(); // at least 60 fps
            update(timePerFrame); //60 fps
        }
        render(); // as many as possible
    }

}

找到了解决方案。

问题是由于测试平台为 x64 系统生成的库文件引起的。 在 Win(32) 模式下重新生成一个库文件生成了正确的库文件,它解决了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM