SFML 和 Box2D 不兼容

SFML and Box2D not compatible

所以,我正在学习使用 Box2D,并且我使用 SFML 进行渲染,但是我已经 运行 进入了一些 issues.Note:我正在使用 Visual Studio 2017 Windows 10,以及最新版本的 SFML 和 Box2D。

我已经像 Box2D 手册中那样创建了一个地面盒:

b2Vec2 gravity(0.0f, -9.81f);
b2World world(gravity);

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(50.0f, 100.0f);

b2Body* groundBody = world.CreateBody(&groundBodyDef);
b2PolygonShape groundBox;
groundBox.SetAsBox(50.0f, 10.0f);
groundBody->CreateFixture(&groundBox, 0.0f);

还有一些用于创建 window、运行 游戏循环和创建 sf::RectangleShape 对象的 SFML 代码,它与 groundBox 在同一位置,但是我'我不知道该怎么做,所以当时我只是使用神奇的数字。

RenderWindow window;
window.create(VideoMode(640, 480),"Test for Box2D");
Event event;

//Box----------------------------------
RectangleShape box(Vector2f(100.0f, 20.0f));
box.setPosition(50.0f, 100.f);
box.setFillColor(Color::Red);


//Game loop---------------------------
while (window.isOpen()) {
    //window closure
    while (window.pollEvent(event)) {
        if (event.type == Event::Closed) {
            window.close();
        }
    }

    //////// Drawing  ////////
    window.clear();
    //------------------------------------------
    window.draw(box);
    //------------------------------------------
    window.display();
}

我的问题是链接错误;如果我使用 x86,我会收到一堆 Box2D 错误,最后是:

warning LNK4272: library machine type 'x64' conflicts with target machine 'x86'
fatal error LNK1120: 11 unresolved externals

这是我遇到的一些错误:

`Source.obj : error LNK2001: unresolved external symbol "public: virtual 
class b2Shape * __thiscall b2PolygonShape::Clone(class b2BlockAllocator 
*)const " (?Clone@b2PolygonShape@@UBEPAVb2Shape@@PAVb2BlockAllocator@@@Z)`

Source.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall b2PolygonShape::GetChildCount(void)const " (? GetChildCount@b2PolygonShape@@UBEHXZ)

Source.obj : error LNK2019: unresolved external symbol "public: void __thiscall b2PolygonShape::SetAsBox(float,float)" (? SetAsBox@b2PolygonShape@@QAEXMM@Z) referenced in function _main

Source.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall b2PolygonShape::TestPoint(struct b2Transform const &,struct b2Vec2 const &)const " (? TestPoint@b2PolygonShape@@UBE_NABUb2Transform@@ABUb2Vec2@@@Z)

所以我尝试将其更改为 x64,但是我遇到了这样的问题:

sfml-graphics-d.lib(sfml-graphics-d-2.dll) : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'x64'

我检查了多次以确保包含 lib 和 include 目录,还检查了其他依赖项并将正确的 .dll SFML 文件粘贴到 Build(调试)文件夹中。 我不知道问题出在哪里,所以非常感谢您的帮助!

您似乎在混合使用 x86 和 x64 程序集。

如果您想使用 x64 编译器创建应用程序,则需要为 Box2D 和 SFML 获取 x64 的预构建二进制文件。

如果您想使用 x86 编译器创建应用程序,则需要为 Box2D 和 SFML 获取 x86 的预构建二进制文件。

但是由于我没有看到 Box2D 的预构建二进制文件,您可能编译了自己的二进制文件。然后你只需要确保在构建 Box2D 时选择了正确的编译器。