SFML и Box2D не совместимы - PullRequest
       39

SFML и Box2D не совместимы

0 голосов
/ 23 февраля 2019

Итак, я учусь использовать Box2D, а для рендеринга я использую SFML, но я столкнулся с некоторыми проблемами. Примечание: я использую 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);

А также некоторый SFML-код для создания окна, запуска игрового цикла и создания объекта sf::RectangleShape,который находится в том же месте, что и 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 и включили каталоги, также проверьте дополнительные зависимости и вставьте нужные .dll-файлы .dll в папку Build (Debug).Я не знаю, в чем проблема, поэтому любая помощь очень ценится!

1 Ответ

0 голосов
/ 14 марта 2019

Похоже, вы смешиваете сборки x86 и x64.

Если вы хотите создать свое приложение с использованием компилятора x64, вам потребуется предварительно подготовленные двоичные файлы для x64 для Box2D и SFML.

Если вы хотите создать свое приложение с использованием компилятора x86, вам нужно получить предварительно скомпилированные двоичные файлы для x86 для Box2D и SFML.

Но поскольку я не вижу предварительновстроенные двоичные файлы для Box2D, вы, вероятно, скомпилировали свои собственные двоичные файлы.Тогда вам просто нужно убедиться, что вы выбрали правильный компилятор при сборке Box2D.

...