关于cocos2dx3.0与cocostudio整合中使用物理引擎的问题

大家好,我使用cocostudio1.4.0.1新建了一个场景,场景中有一个动画。我想要达到的效果是,在这个场景中,动画初始能够有一个向下的初始速度,通过物理引擎完成。
bool GameMainScene::init()
{
   if(!Scene::init())
    {
        return false;
    }

    //获取窗口大小
    Size size = Director::getInstance()->getWinSize();

    //增加重力效果
    Vect gravity(0, -0.5f);
    this->getPhysicsWorld()->setGravity(gravity);
    /* 开启测试模式 */
    this->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

    //加载场景
    auto sceneNode = (Layout*)SceneReader::getInstance()->createNodeWithSceneFile("publish/Scene_Fight.json");
    this->addChild(sceneNode, 0, 1);

    //设置物理
    auto body = PhysicsBody::createBox(Size(32, 68));
    body->getShape(0)->setFriction(0);
    body->getShape(0)->setRestitution(1.0f);
    body->setCategoryBitmask(1);    // 0001
    body->setCollisionBitmask(1);   // 0001
    body->setContactTestBitmask(1); // 0001

    //从场景资源中取出英雄动画
    Node* playNode = sceneNode->getChildByTag(10020);
    playNode->setPhysicsBody(body);
    player = new Player(playNode);
    player->setPosition(Point(100,200));
    this->addChild(player);

       ..........
}

```


以上是我的GameMainScene类中的init方法实现,GameMainScene是一个Scene类。目前添加在player中的物理引擎效果不起作用,而且debug模式下应该出现的那个32*68的矩形也没有出现。尝试在init方法中通过创建一个sprite的方式,然后通过setPhysicsBody的方法设置body参数的话,是有效果的。

这个问题估计是父子节点的关系造成的,Player类的设计我是参考该帖子http://www.cocoachina.com/bbs/read.php?tid=194427。
因为auto sceneNode = (Layout*)SceneReader::getInstance()->createNodeWithSceneFile(“publish/Scene_Fight.json”);中的sceneNode作为GameMainScene的子节点,而动画是作为sceneNode里面的子节点,player也是GameMainScene的子节点,所以动画无法作为Player,而只能作为Player的一个成员变量,否则会出现子节点不能重复添加的错误。这同时也造成添加的物理效果,也就是auto body = PhysicsBody::createBox(Size(32, 68));中的body,不能应用于player中的动画(也就是场景中主角的动画)。

同时,上面代码中的addChild和addPhysicsBody方法的顺序也有错误。

后面我将表示主角的动画从场景中删除,单独在代码中以:
ArmatureDataManager::getInstance()->addArmatureFileInfo(“publish/Animation_Dragon.ExportJson”);
Armature* playerArmature = Armature::create(“Animation_Dragon”);
这种方法从动画编辑器的资源中加载,然后作为Player的子节点就解决了这个问题。

不知道我的理解有没有问题。。。。