C++ Box2D,联系人侦听器:从不调用BeginContact

C++ Box2D,联系人侦听器:从不调用BeginContact,c++,box2d,C++,Box2d,我一直在尝试将Box2D实现到这段代码中,但我一直非常执着于此。我到处寻找答案,但找不到任何可以解决这个问题的方法。我看了一些指南,并尝试了一些帮助其他用户的修复,比如做b2World->SetAllowSleeping(false) 我从创建世界和设置联系人侦听器开始。世界类包含b2World,因此我获取世界并设置联系人侦听器。要添加,这两个指针都存储在场景类中 m_World = new World(); m_ContactListener = new ContactList

我一直在尝试将Box2D实现到这段代码中,但我一直非常执着于此。我到处寻找答案,但找不到任何可以解决这个问题的方法。我看了一些指南,并尝试了一些帮助其他用户的修复,比如做b2World->SetAllowSleeping(false)

我从创建世界和设置联系人侦听器开始。世界类包含b2World,因此我获取世界并设置联系人侦听器。要添加,这两个指针都存储在场景类中

    m_World = new World();
    m_ContactListener = new ContactListener(m_World);

    m_World->GetB2World()->SetContactListener(m_ContactListener);
我返回指针并将其存储在场景中,以防以后需要

我的Contact Listener类基本上只是每个教程都说的基础。我在BeginContact()中插入了几行代码,以设置一个断点,并尝试查看它是否正常工作,但到目前为止还没有正常工作

这是ContactListener。h:

#pragma once
class ContactListener : public b2ContactListener
{
private:
    World* m_World;
public:
    ContactListener(World* aWorld);
    ~ContactListener();`

    virtual void BeginContact(b2Contact* aContact);
    virtual void EndContact(b2Contact* aContact);

    void SetWorld(World* aWorld) { m_World = aWorld; }
    World* GetWorld() { return m_World; }
};
以下是ContactListener.cpp文件: #包括“pch.h”

正如我前面所说,我添加了几行代码只是为了尝试设置一个断点。我读过的指南说,只需覆盖功能,一切都应该正常。对此问题的任何帮助都将不胜感激,如果您需要更多信息,我将很乐意添加任何信息

对于身体,我创建了两个。一个是静态的,一个是动态的

以下是我用来创建实体的函数:

b2Body* World::CreateBody(b2Vec2 aPosition, float aRotation, BodyType aType,          GameObject* aOwner)
{
    b2BodyDef bodyDef;
    bodyDef.position = aPosition;
    bodyDef.angle = aRotation;

    if (aType == KinematicBody)
    {
        bodyDef.type = b2_kinematicBody;
    }
    else if (aType == DynamicBody)
    {
        bodyDef.type = b2_dynamicBody;
    }
    else
    {
        bodyDef.type = b2_staticBody;
    }

    bodyDef.userData = aOwner;

    return m_b2World->CreateBody(&bodyDef);
}
然后在我创建了我之前提到的两个实体之后:

    ((PlayerObject*)m_pGameObjects["Floor"])->AddBody(m_World->CreateBody(aPosBlock, aRotationBlock, World::BodyType::StaticBody, m_pGameObjects["Floor"]));
    ((PlayerObject*)m_pGameObjects["Player"])->AddBody(m_World->CreateBody(aPos, aRotation, World::BodyType::DynamicBody, m_pGameObjects["Player"]));

我再次查看了我的代码和教程,发现我的问题是缺少固定装置。这只是为了证明,如果你试图加快你的代码,你总是会错过一些东西。感谢所有试图帮助我解决这个问题的人。

在您的第一个代码中,您返回一个指向“temp”的指针,但当您的函数退出时,temp超出了范围。我很确定它做到了这一点。这实际上是我在查阅不同指南后编写的一个备份函数。我的原版在场景中有一个联系人侦听器指针,然后我创建了一个新的实例。正如lolando所说,您显示的代码超出了范围。请更正该错误,然后重试。如果结果仍然相同,请编辑您的问题,以显示您认为不再有超出范围的数据被使用的已更正代码。但是,如果它有效,请在回答部分解释此修复,这样这个问题就不会再显示为未回答。谢谢看起来超出范围的代码被编辑掉了。酷。现在,请显示代码,该代码演示了创建的实体以及应调用联系人侦听器的动力学。
    ((PlayerObject*)m_pGameObjects["Floor"])->AddBody(m_World->CreateBody(aPosBlock, aRotationBlock, World::BodyType::StaticBody, m_pGameObjects["Floor"]));
    ((PlayerObject*)m_pGameObjects["Player"])->AddBody(m_World->CreateBody(aPos, aRotation, World::BodyType::DynamicBody, m_pGameObjects["Player"]));