Cocos2d x 平铺贴图层上的视差效果

Cocos2d x 平铺贴图层上的视差效果,cocos2d-x,parallax,Cocos2d X,Parallax,我正在使用三层平铺贴图,我想在这些层上提供视差效果。 我的代码是: CCTMXTiledMap *city = CCTMXTiledMap::create("City.tmx"); CCTMXLayer* ForegroundLayer = city->layerNamed("ForeGround"); CCTMXLayer* BackgroundLayer1 = city->layerNamed("Background1"); CCTMXLayer* Ba

我正在使用三层平铺贴图,我想在这些层上提供视差效果。 我的代码是:

     CCTMXTiledMap *city = CCTMXTiledMap::create("City.tmx");

     CCTMXLayer* ForegroundLayer = city->layerNamed("ForeGround");
 CCTMXLayer* BackgroundLayer1 = city->layerNamed("Background1");
 CCTMXLayer* BackgroundLayer2 = city->layerNamed("Background2");

     CCParallaxNode* voidNode = CCParallaxNode::create();

    // NOW add the 3 layers to the 'void' node

     voidNode->addChild(BackgroundLayer2, -1, ccp(0.4f,0.5f), CCPointZero);
     voidNode->addChild(BackgroundLayer1, 1, ccp(2.2f,1.0f), ccp(0,-200) );
     voidNode->addChild(ForegroundLayer, 2, ccp(3.0f,2.5f), ccp(200,800) );

voidNode->runAction(temp); //some action temp

    addChild(voidNode);
它给出的断言失败:child->m_pParent==0 如果我们使用精灵而不是TMXLayer,同样的代码也可以工作。
我在这段代码中做错了什么?

这些层已经是CCTMXTiledMap的子节点。一个节点只能有一个父节点

可以尝试先从其父层中删除每个层,然后将其添加到voidnode。但是,这可能不起作用,因为图层可能依赖于其tilemap父级。

请尝试此代码

backgroundLayer->retain();
backgroundLayer->removeFromParentAndCleanup(false);
parallaxNode->addChild(backroundLayer, 0, Vec2(0, 0), Vec2(0, 0));//some points
backgroundLayer->release();

回答得很好。这真的奏效了。谢谢你的帮助。互联网上提供的信息少得多,这就是为什么你的答案非常有用的原因。再次感谢。