0

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

     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 如果我们使用精灵而不是 TMXLayers,则相同的代码可以工作。我在这段代码中做错了什么?

4

2 回答 2

1

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

您可以尝试先从其父层中删除每个层,然后将它们添加到 voidnode。然而,这可能不起作用,因为图层可能取决于它们的 tilemap 父级。

于 2013-03-21T12:20:05.497 回答
0

试试这个代码

backgroundLayer->retain();
backgroundLayer->removeFromParentAndCleanup(false);
parallaxNode->addChild(backroundLayer, 0, Vec2(0, 0), Vec2(0, 0));//some points
backgroundLayer->release();
于 2014-11-26T01:06:48.310 回答