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 выгоды.

Другие вопросы по тегам