gpt4 book ai didi

c++ - Box2D Contact Listener Collision 仅间歇性工作

转载 作者:行者123 更新时间:2023-11-28 04:35:16 26 4
gpt4 key购买 nike

我有一个与动态物体碰撞的动态物体和一个简单的接触监听器类,如下所示:

void myContactListener::BeginContact(b2Contact* contact)
{
void* bodyUserData = contact->GetFixtureA()->GetBody()->GetUserData();

if (bodyUserData)
{
static_cast<EnemyEntity*>(bodyUserData)->startContact();
}

bodyUserData = contact->GetFixtureB()->GetBody()->GetUserData();

if (bodyUserData)
{
static_cast<EnemyEntity*>(bodyUserData)->endContact();
}
}

void myContactListener::EndContact(b2Contact* contact)
{
void* bodyUserData = contact->GetFixtureA()->GetBody()->GetUserData();

if (bodyUserData)
static_cast<EnemyEntity*>(bodyUserData)->endContact();

bodyUserData = contact->GetFixtureB()->GetBody()->GetUserData();

if (bodyUserData)
static_cast<EnemyEntity*>(bodyUserData)->endContact();
}

每当我将其中一个动态物体移动到彼此时,总是会在第一时间检测到碰撞并停止碰撞。但是,如果我尝试再次碰撞它们,第一次后通常不会检测到任何碰撞。有时确实如此。我该怎么做才能解决这个问题?我的代码中没有其他内容涉及任何 Box2D 代码。

这是我的联系监听器头文件:

class myContactListener : public b2ContactListener
{
private:
public:
// Contact listener methods
void BeginContact(b2Contact* contact);
void EndContact(b2Contact* contact);
};

以及 EnemyEntity Box2D 方法:

void EnemyEntity::createStarBox2DCollision(b2World *world)
{
enemyType = EnemyType::Star;

def.type = b2_dynamicBody;
def.position.Set(1000, 1000);
body = world->CreateBody(&def);
box.SetAsBox(rectShapeSize.x / 2, rectShapeSize.y / 2);

fixtureDef.shape = &box;
fixtureDef.density = 1.0;
fixtureDef.friction = 0.3;

body->CreateFixture(&fixtureDef);
body->SetUserData(this);
}

最佳答案

看起来你应该有

void myContactListener::BeginContact(b2Contact* contact)
{
...
static_cast<EnemyEntity*>(bodyUserData)->startContact();
}
}

而不是

void myContactListener::BeginContact(b2Contact* contact)
{
...
static_cast<EnemyEntity*>(bodyUserData)->endContact();
}
}

对于两个物体,而不是仅仅对于 A

关于c++ - Box2D Contact Listener Collision 仅间歇性工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51625325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com