Итак, я учусь использовать 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).Я не знаю, в чем проблема, поэтому любая помощь очень ценится!