网上查了一天结合起来写的代码,结果是无法实现碰撞.无法使碰撞和碰撞监听事件一起使用(至少有一样会失效)
不知道什么原因,各位帮忙看看代码.
最简单的入门,就是球的碰撞事件,问题是:碰撞在大量查找资料下能监听了,但是碰撞的物体无法互相作用了。
#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;
}