如何在Box2D中创建世界而又不离开未解决的外部因素

问题描述 投票:0回答:1

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

  1. 使用premake5创建构建
  2. 打开一个新的Visual Studio 2019项目
  3. 将附加包含目录设置为Box2D标头文件夹
  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
    }

}

c++ visual-studio box2d sfml
1个回答
0
投票

找到了解决方案。

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

© www.soinside.com 2019 - 2024. All rights reserved.