그래요. 아주 단순한 엔진을 만들고 있습니다. ECS를 구현했습니다. 이제 물리학을 위해 Box2D를 구현하려고하고 있습니다. 문제는 그것입니다. 그래서 저는 타입 구성 요소를 가지고 있습니다 : "RigidBody2D"는 물리 계산을합니다. (예 : Unity3D는 Start, Awake 및 Update 함수를 보유한 구성 요소와 같이 시스템을 사용하지 않습니다.)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를"내가 내 콘솔에서이 작업을 실행 한 후 나는이 메시지를 얻을 클래스로 구현 :
을 내가이 줄을 언급 할 때, 프로그램이 실행Body->CreateFixture(&fixtureDef);
, 다음 비주얼 스튜디오 2015 디스플레이 나에게 메시지 : "Wntdll.pdb Not Loaded, wntdll.pdb contains the debug information required to find the source for the module ntdll.dll"
가 나 '를
"Assertion failed: m_nodeCount == m_nodeCapacity, file ..\..\Box2D\Collision\b2DynamicTree.cpp, line 58"
일부 테스트 후 나는이 문제를 일으키는 라인이 있음을 발견 이 문제를 일으키는 원인이 무엇인지 또는 왜 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