好吧,我正在製作自己的簡單引擎,我已經實現了一個成功的ECS,現在我正在嘗試實現Box2D的物理功能,並且我有一些所以我有一個類型爲「RigidBody2D」的組件,它進行了一些物理計算,看起來像這樣(注意我使用Unity3D類似的組件,它們包含啓動,喚醒和更新功能,我不使用系統):Box2D:斷言失敗,Wntdll.pdb未加載
'RigidBody.h'
#pragma once
#include "Component.h"
class RigidBody2D : public Component
{
private:
float Density = 1.f;
float Friction = 1.f;
b2BodyDef bodyDef;
b2FixtureDef fixtureDef;
b2PolygonShape dynamicBox;
public:
Transfrm* Trans;
b2Body* Body;
RigidBody2D() : Component("RigidBody2D") {
Trans = new Transfrm(b2Vec2(0.f, 0.f), 0.f, b2Vec2(1.f, 1.f));
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(Trans->Position.x, Trans->Position.y);
Body = CurrentPhysicsWorld->CreateBody(&bodyDef);
dynamicBox.SetAsBox(1.0f, 1.0f);
fixtureDef.shape = &dynamicBox;
fixtureDef.density = GetDensity();
fixtureDef.friction = GetFriction();
Body->CreateFixture(&fixtureDef); // The Line That Causes trouble
};
~RigidBody2D();
};
好了,一切都看起來不錯,我基本上覆制從Box2D的示例中的例子:「HelloWorld.cpp」,並將其落實到一類,我在控制檯中運行這個後,我得到這個消息:
"Assertion failed: m_nodeCount == m_nodeCapacity, file ..\..\Box2D\Collision\b2DynamicTree.cpp, line 58"
一些測試後,我發現,造成這個問題的路線是:
Body->CreateFixture(&fixtureDef);
當我註釋此行,程序運行時,則Visual Studio的2015年顯示了我一個消息:"Wntdll.pdb Not Loaded, wntdll.pdb contains the debug information required to find the source for the module ntdll.dll"
我我不確定是什麼導致了這個問題,或者爲什麼這是我第一次使用Box2D。
編輯: 一個MVCE必須是這一點,就需要建立的Box2D與該項目能夠運行該代碼:
#include <Box2D.h>
b2World CurrentWorld;
class World {
public:
b2World physicsWorld;
World() { CurrentWorld = this->physicsWorld; };
~World() {};
};
class RigidBody2D
{
public:
b2Body* Body;
b2BodyDef bodyDef;
b2FixtureDef fixtureDef;
b2PolygonShape dynamicBox;
RigidBody2D() {
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(Trans->Position.x, Trans->Position.y);
Body = CurrentWorld->CreateBody(&bodyDef);
dynamicBox.SetAsBox(1.0f, 1.0f);
fixtureDef.shape = &dynamicBox;
Body->CreateFixture(&fixtureDef);
}
~RigidBody2D() {};
};
int main() {
World wrld = World();
RigidBody2D body = RigidBody2D();
return 0;
}
可能有些內存損壞。提供[mvce](http://stackoverflow.com/help/mcve),這樣我們就可以編譯並運行代碼來檢查它。 – folibis
@folibis編輯我的文章,並添加了一個MVCE,請確保您測試了它。 – kooldart