У меня есть подклассы Layer
и переопределенная функция onEnter
:
void MyLayer::onEnter()
{
Layer::onEnter();
Size visibleSize = Director::getInstance()->getVisibleSize();
Point visibleOrigin = Director::getInstance()->getVisibleOrigin();
setPosition(visibleOrigin.x, visibleOrigin.y + visibleSize.height);
runAction(EaseOut::create(MoveTo::create(1, Vec2(visibleOrigin)), 10));
}
Это приведет к тому, что мой слой войдет на экран сверху и с легкостью. Теперь я хочу удалить слой из запаха с таким же эффектом. Я попытался использовать onExitTransitionDidStart
но это не помогает:
void MyLayer::onExitTransitionDidStart()
{
Size visibleSize = Director::getInstance()->getVisibleSize();
Point visibleOrigin = Director::getInstance()->getVisibleOrigin();
runAction(EaseIn::create(MoveTo::create(1, Vec2(visibleOrigin.x, visibleOrigin.y + visibleSize.height)), 10));
}
Как я могу контролировать способ удаления слоя со сцены?
Вы перепробовали неправильный метод - вы должны переопределить onExit()
. onExitTransitionDidStart()
вызывается в слоях, когда начинается их родительский переход на другую сцену. С другой стороны, onExit()
будет вызываться всегда, когда слой покидает сцену.
Изменение: Ваш комментарий верен.
После второй мысли, проще всего было бы написать собственный метод remove(), который бы сделал что-то вроде этого:
void MyLayer::remove() {
this->runAction(Sequence::create(/*your actions here*/, CallFunc::create(CC_CALLBACK_0(Layer::removeFromParent, this)), NULL);
}
Это запустит действие, которое удалит узел в конце.