关于3.2默认物理引擎多边形碰撞回调函数

系统默认的回调函数只能执行矩形吗?我创建两个多边形body 就不会调用碰撞回调函数呢。但是其中一个换成矩形的话就可以执行回调。 改成多边形后就无法回调函数了 而且 默认的setDynamic是false 。为什么呢,我已开始以为是掩码的问题但是后来当我改变成矩形的时候却可以执行,应该不是源码的问题。我朋友说可能是我写的错误我也不知道我写的对不对。代码附上。



//init 函数内容


    Point polygon]={
        Point(-15,-2),
        Point(-3,-26),
        Point(37,-30),
        Point(61,-14),
        Point(73,13),
        Point(52,31),
        Point(-7,25),
        Point(-15,-2)
    };
    body=PhysicsBody::create();
    body->addShape( PhysicsShapeEdgePolygon::create( polygon,8 ) );



    //另外一个body继承的node类 掩码也设置成1

    body->setCategoryBitmask(0x0001);
    body->setCollisionBitmask(0x0001);
    body->setContactTestBitmask(0x0001);
    body->setDynamic(false);
    
    rbrid->setPhysicsBody(body);

    addChild(rbrid);

//绑定消息回调函数
auto contactListener=EventListenerPhysicsContact::create();
    contactListener->onContactBegin=CC_CALLBACK_1(CObstacle::OnCollision,this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener,this);

//回调函数,其中一个body变成矩形执行,两个都是多边形不执行
bool FlyBird::onContactBegin(const PhysicsContact& contact)
{

//*/    Vec2 x=obstacle->getPosition();
//    obstacle->setPosition(x)*/;
    //body->setDynamic(false);
    Game=GameDead;
    return true;
}

求物理方面的大神解答,这个问题困扰我将近一个礼拜了。基本这个解决游戏就搞定了,球大神帮帮我们这些游戏小白

update 里面给body一个每秒移动一像素的代码
obstacle->getPhysicsBody()->setVelocity(Vec2(-60,0));