65 lines
1.5 KiB
C++
65 lines
1.5 KiB
C++
#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)
|
|
{
|
|
// 初始化动作属性
|
|
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;
|
|
}
|
|
|
|
// 初始化场景属性
|
|
next->getRoot()->move(-distPosX, -distPosY);
|
|
|
|
// 第一个场景移出
|
|
auto action1 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY));
|
|
if (prev)
|
|
{
|
|
action1->setTarget(prev->getRoot());
|
|
}
|
|
|
|
// 第二个场景移入
|
|
auto action2 = new EActionMoveBy(m_fMoveDuration, EVec(distPosX, distPosY));
|
|
action2->setTarget(next->getRoot());
|
|
|
|
// 标志动画结束
|
|
auto action3 = new EActionCallback([&, prev, next] {
|
|
transitional = false;
|
|
// 还原场景状态
|
|
if (prev)
|
|
{
|
|
prev->getRoot()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2);
|
|
}
|
|
next->getRoot()->setPos(EApp::getWidth() / 2, EApp::getHeight() / 2);
|
|
});
|
|
|
|
// 添加顺序动作
|
|
EActionManager::addAction(new EActionSequence(2, new EActionTwoAtSameTime(action1, action2), action3));
|
|
}
|