いくつか頭を悩ませた後CCSpriteBatchNode
、cocos2d olny を使用すると、子として追加されたスプライトを z オーダーできることがわかりました (これは明らかです。今ではわかりました..)
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"token_default.plist"];
CCSpriteBatchNode *tokenSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"token_default.png"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"objects_default.plist"];
CCSpriteBatchNode *objectsSpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"objects_default.png"];
CCSprite *token = [[[CCSprite alloc] initWithSpriteFrameName:@"token_SE.png"] autorelease];
[token setPosition:tokenSpawnPoint];
CCSprite *enemy = [[[CCSprite alloc] initWithSpriteFrameName:@"token_blak_SE.png"] autorelease];
[enemy setPosition:enemySpawnPoint];
CCSprite *houseA = [[[CCSprite alloc] initWithSpriteFrameName:@"house_small.png"] autorelease];
[houseA setPosition:[self randomHousePosition]];
CCSprite *houseB = [[[CCSprite alloc] initWithSpriteFrameName:@"house_big.png"] autorelease];
[houseB setPosition:[self randomHousePosition]];
[tokenSpriteSheet addChild:token];
[tokenSpriteSheet addChild:enemy];
[objectsSpriteSheet addChild:houseA];
[objectsSpriteSheet addChild:houseB];
そして、次のように表示リストに追加する必要があるため..
[_isoMap addChild:objectsSpriteSheet];
[_isoMap addChild:tokenSpriteSheet];
他の家の間で単一のトークンの z オーダーを変更する方法はありません...
これらのバッチ ノードの順序を変更するまで、それらは常に家の上にレンダリングされます
ところで、すべてのスプライトのアーツを 1 つの大きな単一のバッチ ノードに「マージ」できます...そうすることで、スプライトの座標を使用してスプライトを並べ替えることが可能になりました
[fullSpriteSheet reorderChild:token z:token.position.y];
私はそれに少し立ち往生しています......異なるスプライトバックノードを持つことでそれを達成する方法はありますか? またはプログラムで2つのバッチノードをマージすることは可能ですか? (またはそのようなもの)
LozArcherによる github の非常に興味深いオープン プロジェクトであるKnightFightを見つけました。彼はバッチ ノードの代わりにCCSpriteFrame
andCCSprite
のメソッドを使用しました... setDisplayFrame
xcode 4)