после нескольких головных болей я понял, что использование 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-порядок одиночных токенов между другими домами ...
они всегда будут отображаться поверх дома, пока я не изменит порядок этих узлов пакета
Кстати, я могу «объединить» все искусства спрайтов в один большой узел пакета ... благодаря этому стало возможным упорядочивать спрайты, используя координаты спрайта
[fullSpriteSheet reorderChild:token z:token.position.y];
Я немного застрял в этом ...... есть ли способ достичь этого, имея разные спакт-бакт-узлы? или можно программно объединить два батчода? (или что-то в этом роде)
я нашел KnightFight , действительно интересный открытый проект на github от LozArcher .. он использовал CCSpriteFrame
и CCSprite
метод setDisplayFrame
вместо пакетных узлов ... но я могу не запускайте его, так как он кажется более старой версией cocos2d (очевидно, не работает с xcode 4)