关于cocos 3.x版本的功能 -- 自带物理引擎

网上查了一天结合起来写的代码,结果是无法实现碰撞.无法使碰撞和碰撞监听事件一起使用(至少有一样会失效)

不知道什么原因,各位帮忙看看代码.
最简单的入门,就是球的碰撞事件,问题是:碰撞在大量查找资料下能监听了,但是碰撞的物体无法互相作用了。

#include “MyPhsis.h”
#include “SenceHelp.h”
SenceHelp help5;
//物理引擎标识
int ball1Mask = 1 << 0;//球1 1
int ball2Mask = 1 << 1;//球2 4
int wallMask = 1 << 2;//地面
MyPhsis::MyPhsis(void)
{
//物理引擎标识
ball1Mask = 1 << 0;//球1
ball2Mask = 1 << 1;//球2
wallMask = 1 << 2;//地面
log("%X,%X,%X",ball1Mask,wallMask,ball1Mask&(wallMask|ball1Mask));
}

MyPhsis::~MyPhsis(void)
{
}

bool MyPhsis::init()
{

if (!Layer::init())
{
    return false;
}

vsize = Director::getInstance()->getVisibleSize();


return  true ;

}

Scene* MyPhsis::CreateScene()
{

auto   scene =   Scene::createWithPhysics();

scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

auto  layer = MyPhsis::create();

scene->addChild(layer);

return scene;

}

void MyPhsis::Add_XXX()
{
auto body = PhysicsBody::createEdgeBox(vsize , PHYSICSBODY_MATERIAL_DEFAULT,3);

body->setCategoryBitmask(ball1Mask|wallMask); // 0001

body->setContactTestBitmask( ball1Mask|wallMask); // 0100

body->setCollisionBitmask(ball1Mask|wallMask); // 0011
auto self = Node::create(); 
self->setPosition(vsize.width/2,vsize.height/2);
self->setPhysicsBody(body);
this->addChild(self);

}

void MyPhsis::ADD_OOO()
{
//////////////////////////////////////////////////////////////////////////
LabelTTF* labe1_7= help5.MyCreateLabelTTF(this,“MyPhysis”,ccp(0,0),ccp(300,450));
help5.AttachLiZi_NODE(labe1_7,“star1.png”);
std::function<bool(Touch*, Event*)> pp7 = =](Toucht, Event e)
{
if (help5.MyIsBondBox(labe1_7,t))
{

        /*Director::getInstance()->popScene();*/
       ADD_OOO();

    } 
    return false;
};
help5.MySetEvent_OnTouchBgan_Function(labe1_7,pp7); 

//////////////////////////////////////////////////////////////////////////

auto body = PhysicsBody::createBox(labe1_7->getContentSize(), PHYSICSBODY_MATERIAL_DEFAULT); 

body->setCategoryBitmask(ball1Mask|wallMask); // 0001

body->setContactTestBitmask(ball1Mask|wallMask); // 0100

body->setCollisionBitmask(wallMask|ball1Mask); // 0011
labe1_7->setPhysicsBody(body);

//////////////////////////////////////////////////////////////////////////
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_1(MyPhsis::onContactBegin, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, labe1_7);

}
void MyPhsis::onEnter()
{

Layer::onEnter();
Add_XXX();
ADD_OOO();

}
bool MyPhsis::onContactBegin(PhysicsContact& contact)
{

log("碰撞!");//
return  false;

}

body->setCategoryBitmask(ball1Mask|wallMask); // 0111//将自己的掩码改为111就可以了

body->setContactTestBitmask( ball1Mask|wallMask); // 0100

body->setCollisionBitmask(ball1Mask|wallMask); // 0011