0

私はタイル マップの 3 つのレイヤーを使用しており、これらのレイヤーに視差効果を与えたいと考えています。私のコードは次のとおりです。

     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 の子ノードです。ノードは、親を 1 つだけ持つことができます。

最初に各レイヤーをその親から削除し、それらを voidnode に追加してみてください。ただし、レイヤーがタイルマップの親に依存している可能性があるため、これが機能しない可能性があります。

于 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 に答える