我正在使用三层平铺地图,我想在这些图层上给出视差效果。 我的代码是:
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,相同的代码可以工作。 我在这段代码中做错了什么?
答案 0 :(得分:1)
图层已经是CCTMXTiledMap的子节点。一个节点只能有一个父节点。
您可以先尝试从其父级删除每个图层,然后将它们添加到voidnode。但是,这可能不会起作用,因为图层可能依赖于他们的tilemap父级。
答案 1 :(得分:0)
试试这段代码
backgroundLayer->retain();
backgroundLayer->removeFromParentAndCleanup(false);
parallaxNode->addChild(backroundLayer, 0, Vec2(0, 0), Vec2(0, 0));//some points
backgroundLayer->release();