Magic_Game/Easy2D/Transition/ETransitionScaleEmerge.cpp

68 lines
1.7 KiB
C++
Raw Normal View History

2017-10-21 19:09:31 +08:00
#include "..\etransitions.h"
#include "..\eactions.h"
#include "..\emanagers.h"
2017-10-21 19:09:31 +08:00
e2d::ETransitionScaleEmerge::ETransitionScaleEmerge(float duration, SCALE_EMERGE_MODE mode)
: m_fDuration(duration)
, m_Mode(mode)
{
}
void e2d::ETransitionScaleEmerge::_setTarget(EScene * prev, EScene * next, bool & transitional)
{
float prevScaleBy;
float nextScaleBy;
2017-10-21 19:09:31 +08:00
if (m_Mode == SCALE_EMERGE_MODE::ENTER)
{
prevScaleBy = 0.2f;
nextScaleBy = -0.2f;
2017-10-21 19:09:31 +08:00
}
else
{
prevScaleBy = -0.2f;
nextScaleBy = 0.2f;
2017-10-21 19:09:31 +08:00
}
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
next->getRoot()->setScale(next->getRoot()->getScaleX() - nextScaleBy, next->getRoot()->getScaleY() - nextScaleBy);
2017-10-21 19:09:31 +08:00
next->getRoot()->setOpacity(0);
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto prevActionFadeOut = new EActionFadeOut(m_fDuration);
auto prevActionScaleBy = new EActionScaleBy(m_fDuration, prevScaleBy);
2017-10-21 19:09:31 +08:00
auto action1 = new EActionTwoAtSameTime(
prevActionFadeOut,
prevActionScaleBy);
2017-10-21 19:09:31 +08:00
if (prev)
{
prevActionFadeOut->setTarget(prev->getRoot());
prevActionScaleBy->setTarget(prev->getRoot());
2017-10-21 19:09:31 +08:00
}
// <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto nextActionFadeOut = new EActionFadeIn(m_fDuration);
auto nextActionScaleBy = new EActionScaleBy(m_fDuration, nextScaleBy);
2017-10-21 19:09:31 +08:00
auto action2 = new EActionTwoAtSameTime(
nextActionFadeOut,
nextActionScaleBy);
2017-10-21 19:09:31 +08:00
nextActionFadeOut->setTarget(next->getRoot());
nextActionScaleBy->setTarget(next->getRoot());
2017-10-21 19:09:31 +08:00
// <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto action3 = new EActionCallback([&, prev, next] {
transitional = false;
// <20><>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>״̬
if (prev)
{
prev->getRoot()->setScale(1);
prev->getRoot()->setOpacity(1);
}
next->getRoot()->setScale(1);
next->getRoot()->setOpacity(1);
});
// <20><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3));
}