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 时选择了正确的编译器。
所以,我正在学习使用 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 时选择了正确的编译器。