cocos2d, переупорядочить дочерние элементы в другом узле пакета
Я создаю файтинг. У меня есть спрайт-лист для героя и спрайт-лист для монстра. Поскольку обе будут способны выполнять несколько атак, я бы хотел избежать объединения их в одну таблицу спрайтов. И я собираюсь создать больше персонажей.
Теперь я создаю SpriteBatchNode для каждой таблицы спрайтов и добавляю их в слой.
CCLayer* stage = CCLayer::create();
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("character_hero.plist");
this->characterHeroBatchNode = CCSpriteBatchNode::create("character_hero.pvr.ccz");
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("character_monster.plist");
this->characterMonsterBatchNode = CCSpriteBatchNode::create("character_monster.pvr.ccz");
stage->addChild(characterHeroBatchNode);
stage->addChild(characterMonsterBatchNode);
Теперь у меня есть один спрайт в characterHeroBatchNode
и несколько в characterMonsterBatchNode
,
Как я могу изменить порядок монстров и героев z-Order на основе их атрибута PositionY.
Например>
monster1->setPositionY(10); // In monster batch node
hero->setPositionY(24); // In hero batch node
monster2->setPositionY(43); // In monster batch node
Я хочу монстра 1 позади героя. И герой позади monster2.
2 ответа
В прошлом мне приходилось создавать игры, в которых я хотел, чтобы некоторые спрайты были на переднем плане, а другие - на заднем. Спрайты были на разных листах, как у вас.
Чтобы получить их в порядке, который я хотел, я поместил "передние" спрайты в один CCLayer, а "задние" спрайты в другой CCLayer. Я добавил слои к сцене в том порядке, в котором хотел, чтобы они появлялись. Я также манипулировал каждым соответствующим слоем, чтобы заставить их исчезать / исчезать по мере необходимости. Таким образом, вы можете разместить героя на сцене, а затем враги появятся позади него.
Если вы хотите смешивать и сочетать, вы можете иметь 3 слоя, один для "среднего уровня", один для "переднего" и один для "заднего", и динамически перемещать спрайты между слоями.
Это то, что вы искали?
Если я понимаю, что вы спрашиваете, ответ - вы не можете. Рассмотрим каждый CCSpriteBatchNode
быть его собственным контейнером. Вы можете настроить порядок Z спрайтов внутри CCSpriteBatchNode
, но при добавлении партии в CCLayer
целый CCSpriteBatchNode
применяется к CCLayer
в любом порядке Z вы добавили его в. Таким образом, чтобы сделать то, что вы хотите, вам понадобится еще одна партия монстров. Или использовать CCSprites
и добавить / настроить их на CCLayer
так, как вы хотите, но тогда вы явно потеряете CCSpriteBatchNode
выгоды.