Magic_Game/Easy2D/Transition/ETransitionMove.cpp

65 lines
1.5 KiB
C++
Raw Normal View History

2017-10-21 19:09:31 +08:00
#include "..\etransitions.h"
#include "..\eactions.h"
#include "..\etools.h"
e2d::ETransitionMove::ETransitionMove(float moveDuration, MOVE_DIRECT direct)
: m_fMoveDuration(moveDuration)
, m_Direct(direct)
{
}
void e2d::ETransitionMove::_setTarget(EScene * prev, EScene * next, bool & transitional)
{
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float distPosX;
float distPosY;
if (m_Direct == MOVE_DIRECT::UP)
{
distPosX = 0;
distPosY = -EApp::getHeight();
}
else if (m_Direct == MOVE_DIRECT::DOWN)
{
distPosX = 0;
distPosY = EApp::getHeight();
}
else if (m_Direct == MOVE_DIRECT::LEFT)
{
distPosX = -EApp::getWidth();
distPosY = 0;
}
else if (m_Direct == MOVE_DIRECT::RIGHT)
{
distPosX = EApp::getWidth();
distPosY = 0;
}
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
next->getRoot()->move(-distPosX, -distPosY);
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
auto action1 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY));
if (prev)
{
action1->setTarget(prev->getRoot());
}
// <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto action2 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY));
action2->setTarget(next->getRoot());
// <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()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2);
}
next->getRoot()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2);
});
// <20><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3));
}