增加JumpBy和JumpTo动作
This commit is contained in:
parent
f66a56e028
commit
50825ba00d
|
|
@ -60,7 +60,7 @@ void e2d::Action::setName(const String& name)
|
||||||
|
|
||||||
e2d::Action * e2d::Action::reverse() const
|
e2d::Action * e2d::Action::reverse() const
|
||||||
{
|
{
|
||||||
WARN_IF(true, "Action cannot be reversed!");
|
ASSERT(false, "Action cannot be reversed!");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,16 +14,16 @@ void e2d::ActionGradual::_init()
|
||||||
void e2d::ActionGradual::_update()
|
void e2d::ActionGradual::_update()
|
||||||
{
|
{
|
||||||
Action::_update();
|
Action::_update();
|
||||||
// 判断时间间隔是否足够
|
|
||||||
if (_duration == 0)
|
if (_duration == 0)
|
||||||
{
|
{
|
||||||
_delta = 1;
|
_delta = 1;
|
||||||
this->stop();
|
this->stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 计算动作进度
|
|
||||||
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
_delta = min((Time::getTotalTime() - _last) / _duration, 1);
|
||||||
// 判断动作是否结束
|
|
||||||
if (_delta >= 1)
|
if (_delta >= 1)
|
||||||
{
|
{
|
||||||
this->stop();
|
this->stop();
|
||||||
|
|
|
||||||
|
|
@ -89,26 +89,40 @@ void e2d::Animate::onDestroy()
|
||||||
|
|
||||||
e2d::Animate * e2d::Animate::clone() const
|
e2d::Animate * e2d::Animate::clone() const
|
||||||
{
|
{
|
||||||
return new (std::nothrow) Animate(_animation);
|
if (_animation)
|
||||||
|
{
|
||||||
|
return new (std::nothrow) Animate(_animation);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Animate * e2d::Animate::reverse() const
|
e2d::Animate * e2d::Animate::reverse() const
|
||||||
{
|
{
|
||||||
auto& oldFrames = _animation->getFrames();
|
if (_animation)
|
||||||
std::vector<Image*> frames(oldFrames.size());
|
|
||||||
|
|
||||||
if (!oldFrames.empty())
|
|
||||||
{
|
{
|
||||||
for (auto iter = oldFrames.crbegin(), iterCrend = oldFrames.crend(); iter != iterCrend; ++iter)
|
auto& oldFrames = _animation->getFrames();
|
||||||
|
std::vector<Image*> frames(oldFrames.size());
|
||||||
|
|
||||||
|
if (!oldFrames.empty())
|
||||||
{
|
{
|
||||||
Image* frame = *iter;
|
for (auto iter = oldFrames.crbegin(), iterCrend = oldFrames.crend(); iter != iterCrend; ++iter)
|
||||||
if (frame)
|
|
||||||
{
|
{
|
||||||
frames.push_back(frame);
|
Image* frame = *iter;
|
||||||
|
if (frame)
|
||||||
|
{
|
||||||
|
frames.push_back(frame);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
auto animation = new (std::nothrow) Animation(_animation->getInterval(), frames);
|
auto animation = new (std::nothrow) Animation(_animation->getInterval(), frames);
|
||||||
return new (std::nothrow) Animate(animation);
|
return new (std::nothrow) Animate(animation);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ e2d::CallFunc::CallFunc(const Function& func) :
|
||||||
|
|
||||||
e2d::CallFunc * e2d::CallFunc::clone() const
|
e2d::CallFunc * e2d::CallFunc::clone() const
|
||||||
{
|
{
|
||||||
return new CallFunc(_func);
|
return new (std::nothrow) CallFunc(_func);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::CallFunc::_init()
|
void e2d::CallFunc::_init()
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ e2d::Delay::Delay(double duration)
|
||||||
|
|
||||||
e2d::Delay * e2d::Delay::clone() const
|
e2d::Delay * e2d::Delay::clone() const
|
||||||
{
|
{
|
||||||
return new Delay(_delay);
|
return new (std::nothrow) Delay(_delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Delay::_init()
|
void e2d::Delay::_init()
|
||||||
|
|
@ -18,7 +18,7 @@ void e2d::Delay::_init()
|
||||||
void e2d::Delay::_update()
|
void e2d::Delay::_update()
|
||||||
{
|
{
|
||||||
Action::_update();
|
Action::_update();
|
||||||
// 判断时间间隔是否足够
|
|
||||||
if ((Time::getTotalTime() - _last) >= _delay)
|
if ((Time::getTotalTime() - _last) >= _delay)
|
||||||
{
|
{
|
||||||
this->stop();
|
this->stop();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
e2d::JumpBy::JumpBy(double duration, const Vector & vec, double height, int jumps)
|
||||||
|
: ActionGradual(duration)
|
||||||
|
, _deltaPos(vec)
|
||||||
|
, _height(height)
|
||||||
|
, _jumps(jumps)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::JumpBy * e2d::JumpBy::clone() const
|
||||||
|
{
|
||||||
|
return new (std::nothrow) JumpBy(_duration, _deltaPos, _height, _jumps);
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::JumpBy * e2d::JumpBy::reverse() const
|
||||||
|
{
|
||||||
|
return new (std::nothrow) JumpBy(_duration, -_deltaPos, _height, _jumps);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::JumpBy::_init()
|
||||||
|
{
|
||||||
|
ActionGradual::_init();
|
||||||
|
|
||||||
|
if (_target)
|
||||||
|
{
|
||||||
|
_prevPos = _startPos = _target->getPos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::JumpBy::_update()
|
||||||
|
{
|
||||||
|
ActionGradual::_update();
|
||||||
|
|
||||||
|
if (_target)
|
||||||
|
{
|
||||||
|
double frac = fmod(_delta * _jumps, 1.0);
|
||||||
|
double x = _deltaPos.x * _delta;
|
||||||
|
double y = _height * 4 * frac * (1 - frac);
|
||||||
|
y += _deltaPos.y * _delta;
|
||||||
|
|
||||||
|
Point currentPos = _target->getPos();
|
||||||
|
|
||||||
|
Vector diff = currentPos - _prevPos;
|
||||||
|
_startPos = diff + _startPos;
|
||||||
|
|
||||||
|
Point newPos = _startPos + Vector(x, y);
|
||||||
|
_target->setPos(newPos);
|
||||||
|
|
||||||
|
_prevPos = newPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
e2d::JumpTo::JumpTo(double duration, const Point & pos, double height, int jumps)
|
||||||
|
: JumpBy(duration, Point(), height, jumps)
|
||||||
|
, _endPos(pos)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::JumpTo * e2d::JumpTo::clone() const
|
||||||
|
{
|
||||||
|
return new (std::nothrow) JumpTo(_duration, _endPos, _height, _jumps);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::JumpTo::_init()
|
||||||
|
{
|
||||||
|
JumpBy::_init();
|
||||||
|
_deltaPos = _endPos - _startPos;
|
||||||
|
}
|
||||||
|
|
@ -6,8 +6,13 @@ e2d::Loop::Loop(Action * action, int times /* = -1 */)
|
||||||
, _times(0)
|
, _times(0)
|
||||||
, _totalTimes(times)
|
, _totalTimes(times)
|
||||||
{
|
{
|
||||||
ASSERT(_action, "Loop NULL pointer exception!");
|
ASSERT(action, "Loop NULL pointer exception!");
|
||||||
_action->retain();
|
|
||||||
|
if (action)
|
||||||
|
{
|
||||||
|
_action = action;
|
||||||
|
_action->retain();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Loop::~Loop()
|
e2d::Loop::~Loop()
|
||||||
|
|
@ -16,14 +21,25 @@ e2d::Loop::~Loop()
|
||||||
|
|
||||||
e2d::Loop * e2d::Loop::clone() const
|
e2d::Loop * e2d::Loop::clone() const
|
||||||
{
|
{
|
||||||
return new Loop(_action->clone());
|
if (_action)
|
||||||
|
{
|
||||||
|
return new (std::nothrow) Loop(_action->clone());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Loop::_init()
|
void e2d::Loop::_init()
|
||||||
{
|
{
|
||||||
Action::_init();
|
Action::_init();
|
||||||
_action->_target = _target;
|
|
||||||
_action->_init();
|
if (_action)
|
||||||
|
{
|
||||||
|
_action->_target = _target;
|
||||||
|
_action->_init();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Loop::_update()
|
void e2d::Loop::_update()
|
||||||
|
|
@ -36,14 +52,21 @@ void e2d::Loop::_update()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_action->_update();
|
if (_action)
|
||||||
|
|
||||||
if (_action->_isDone())
|
|
||||||
{
|
{
|
||||||
_times++;
|
_action->_update();
|
||||||
|
|
||||||
Action::reset();
|
if (_action->_isDone())
|
||||||
_action->reset();
|
{
|
||||||
|
_times++;
|
||||||
|
|
||||||
|
Action::reset();
|
||||||
|
_action->reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,7 +74,7 @@ void e2d::Loop::reset()
|
||||||
{
|
{
|
||||||
Action::reset();
|
Action::reset();
|
||||||
|
|
||||||
_action->reset();
|
if (_action) _action->reset();
|
||||||
_times = 0;
|
_times = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,5 +86,5 @@ void e2d::Loop::onDestroy()
|
||||||
|
|
||||||
void e2d::Loop::_resetTime()
|
void e2d::Loop::_resetTime()
|
||||||
{
|
{
|
||||||
_action->_resetTime();
|
if (_action) _action->_resetTime();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::MoveBy::MoveBy(double duration, Vector vector) :
|
e2d::MoveBy::MoveBy(double duration, Vector vector)
|
||||||
ActionGradual(duration)
|
: ActionGradual(duration)
|
||||||
{
|
{
|
||||||
_deltaPos = vector;
|
_deltaPos = vector;
|
||||||
}
|
}
|
||||||
|
|
@ -29,10 +29,10 @@ void e2d::MoveBy::_update()
|
||||||
|
|
||||||
e2d::MoveBy * e2d::MoveBy::clone() const
|
e2d::MoveBy * e2d::MoveBy::clone() const
|
||||||
{
|
{
|
||||||
return new MoveBy(_duration, _deltaPos);
|
return new (std::nothrow) MoveBy(_duration, _deltaPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::MoveBy * e2d::MoveBy::reverse() const
|
e2d::MoveBy * e2d::MoveBy::reverse() const
|
||||||
{
|
{
|
||||||
return new MoveBy(_duration, -_deltaPos);
|
return new (std::nothrow) MoveBy(_duration, -_deltaPos);
|
||||||
}
|
}
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
e2d::MoveTo::MoveTo(double duration, Point pos) :
|
e2d::MoveTo::MoveTo(double duration, Point pos)
|
||||||
MoveBy(duration, Vector())
|
: MoveBy(duration, Vector())
|
||||||
{
|
{
|
||||||
_endPos = pos;
|
_endPos = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::MoveTo * e2d::MoveTo::clone() const
|
e2d::MoveTo * e2d::MoveTo::clone() const
|
||||||
{
|
{
|
||||||
return new MoveTo(_duration, _endPos);
|
return new (std::nothrow) MoveTo(_duration, _endPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::MoveTo::_init()
|
void e2d::MoveTo::_init()
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::OpacityBy::OpacityBy(double duration, double opacity) :
|
e2d::OpacityBy::OpacityBy(double duration, double opacity)
|
||||||
ActionGradual(duration)
|
: ActionGradual(duration)
|
||||||
{
|
{
|
||||||
_deltaVal = opacity;
|
_deltaVal = opacity;
|
||||||
}
|
}
|
||||||
|
|
@ -29,10 +29,10 @@ void e2d::OpacityBy::_update()
|
||||||
|
|
||||||
e2d::OpacityBy * e2d::OpacityBy::clone() const
|
e2d::OpacityBy * e2d::OpacityBy::clone() const
|
||||||
{
|
{
|
||||||
return new OpacityBy(_duration, _deltaVal);
|
return new (std::nothrow) OpacityBy(_duration, _deltaVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::OpacityBy * e2d::OpacityBy::reverse() const
|
e2d::OpacityBy * e2d::OpacityBy::reverse() const
|
||||||
{
|
{
|
||||||
return new OpacityBy(_duration, -_deltaVal);
|
return new (std::nothrow) OpacityBy(_duration, -_deltaVal);
|
||||||
}
|
}
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::OpacityTo::OpacityTo(double duration, double opacity) :
|
e2d::OpacityTo::OpacityTo(double duration, double opacity)
|
||||||
OpacityBy(duration, 0)
|
: OpacityBy(duration, 0)
|
||||||
{
|
{
|
||||||
_endVal = opacity;
|
_endVal = opacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::OpacityTo * e2d::OpacityTo::clone() const
|
e2d::OpacityTo * e2d::OpacityTo::clone() const
|
||||||
{
|
{
|
||||||
return new OpacityTo(_duration, _endVal);
|
return new (std::nothrow) OpacityTo(_duration, _endVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::OpacityTo::_init()
|
void e2d::OpacityTo::_init()
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::RotateBy::RotateBy(double duration, double rotation) :
|
e2d::RotateBy::RotateBy(double duration, double rotation)
|
||||||
ActionGradual(duration)
|
: ActionGradual(duration)
|
||||||
{
|
{
|
||||||
_deltaVal = rotation;
|
_deltaVal = rotation;
|
||||||
}
|
}
|
||||||
|
|
@ -29,10 +29,10 @@ void e2d::RotateBy::_update()
|
||||||
|
|
||||||
e2d::RotateBy * e2d::RotateBy::clone() const
|
e2d::RotateBy * e2d::RotateBy::clone() const
|
||||||
{
|
{
|
||||||
return new RotateBy(_duration, _deltaVal);
|
return new (std::nothrow) RotateBy(_duration, _deltaVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::RotateBy * e2d::RotateBy::reverse() const
|
e2d::RotateBy * e2d::RotateBy::reverse() const
|
||||||
{
|
{
|
||||||
return new RotateBy(_duration, -_deltaVal);
|
return new (std::nothrow) RotateBy(_duration, -_deltaVal);
|
||||||
}
|
}
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
#include "..\e2daction.h"
|
#include "..\e2daction.h"
|
||||||
|
|
||||||
|
|
||||||
e2d::RotateTo::RotateTo(double duration, double rotation) :
|
e2d::RotateTo::RotateTo(double duration, double rotation)
|
||||||
RotateBy(duration, 0)
|
: RotateBy(duration, 0)
|
||||||
{
|
{
|
||||||
_endVal = rotation;
|
_endVal = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::RotateTo * e2d::RotateTo::clone() const
|
e2d::RotateTo * e2d::RotateTo::clone() const
|
||||||
{
|
{
|
||||||
return new RotateTo(_duration, _endVal);
|
return new (std::nothrow) RotateTo(_duration, _endVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::RotateTo::_init()
|
void e2d::RotateTo::_init()
|
||||||
|
|
|
||||||
|
|
@ -38,10 +38,10 @@ void e2d::ScaleBy::_update()
|
||||||
|
|
||||||
e2d::ScaleBy * e2d::ScaleBy::clone() const
|
e2d::ScaleBy * e2d::ScaleBy::clone() const
|
||||||
{
|
{
|
||||||
return new ScaleBy(_duration, _deltaX, _deltaY);
|
return new (std::nothrow) ScaleBy(_duration, _deltaX, _deltaY);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::ScaleBy * e2d::ScaleBy::reverse() const
|
e2d::ScaleBy * e2d::ScaleBy::reverse() const
|
||||||
{
|
{
|
||||||
return new ScaleBy(_duration, -_deltaX, -_deltaY);
|
return new (std::nothrow) ScaleBy(_duration, -_deltaX, -_deltaY);
|
||||||
}
|
}
|
||||||
|
|
@ -16,7 +16,7 @@ e2d::ScaleTo::ScaleTo(double duration, double scaleX, double scaleY)
|
||||||
|
|
||||||
e2d::ScaleTo * e2d::ScaleTo::clone() const
|
e2d::ScaleTo * e2d::ScaleTo::clone() const
|
||||||
{
|
{
|
||||||
return new ScaleTo(_duration, _endScaleX, _endScaleY);
|
return new (std::nothrow) ScaleTo(_duration, _endScaleX, _endScaleY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ScaleTo::_init()
|
void e2d::ScaleTo::_init()
|
||||||
|
|
|
||||||
|
|
@ -130,22 +130,27 @@ void e2d::Sequence::add(const std::initializer_list<Action*>& actions)
|
||||||
|
|
||||||
e2d::Sequence * e2d::Sequence::clone() const
|
e2d::Sequence * e2d::Sequence::clone() const
|
||||||
{
|
{
|
||||||
auto a = new Sequence();
|
auto sequence = new (std::nothrow) Sequence();
|
||||||
for (auto action : _actions)
|
for (const auto& action : _actions)
|
||||||
{
|
{
|
||||||
a->add(action->clone());
|
if (action)
|
||||||
|
{
|
||||||
|
sequence->add(action->clone());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return a;
|
return sequence;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Sequence * e2d::Sequence::reverse() const
|
e2d::Sequence * e2d::Sequence::reverse() const
|
||||||
{
|
{
|
||||||
auto a = new Sequence();
|
auto sequence = new (std::nothrow) Sequence();
|
||||||
for (auto action : _actions)
|
for (const auto& action : _actions)
|
||||||
{
|
{
|
||||||
a->add(action->reverse());
|
if (action)
|
||||||
|
{
|
||||||
|
sequence->add(action->reverse());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// ½«¶¯×÷˳ÐòÄæÐòÅÅÁÐ
|
sequence->_actions.reserve(_actions.size());
|
||||||
a->_actions.reserve(_actions.size());
|
return sequence;
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
@ -127,22 +127,27 @@ void e2d::Spawn::add(const std::initializer_list<Action*>& actions)
|
||||||
|
|
||||||
e2d::Spawn * e2d::Spawn::clone() const
|
e2d::Spawn * e2d::Spawn::clone() const
|
||||||
{
|
{
|
||||||
auto a = new Spawn();
|
auto spawn = new (std::nothrow) Spawn();
|
||||||
for (auto action : _actions)
|
for (const auto& action : _actions)
|
||||||
{
|
{
|
||||||
a->add(action->clone());
|
if (action)
|
||||||
|
{
|
||||||
|
spawn->add(action->clone());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return a;
|
return spawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Spawn * e2d::Spawn::reverse() const
|
e2d::Spawn * e2d::Spawn::reverse() const
|
||||||
{
|
{
|
||||||
auto a = new Spawn();
|
auto spawn = new (std::nothrow) Spawn();
|
||||||
for (auto action : _actions)
|
for (const auto& action : _actions)
|
||||||
{
|
{
|
||||||
a->add(action->reverse());
|
if (action)
|
||||||
|
{
|
||||||
|
spawn->add(action->reverse());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// ½«¶¯×÷˳ÐòÄæÐòÅÅÁÐ
|
spawn->_actions.reserve(_actions.size());
|
||||||
a->_actions.reserve(_actions.size());
|
return spawn;
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
110
core/e2daction.h
110
core/e2daction.h
|
|
@ -64,7 +64,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init();
|
virtual void _init();
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update();
|
virtual void _update();
|
||||||
|
|
||||||
// 获取动作结束状态
|
// 获取动作结束状态
|
||||||
|
|
@ -118,8 +118,8 @@ class MoveBy :
|
||||||
public:
|
public:
|
||||||
// 创建相对位移动作
|
// 创建相对位移动作
|
||||||
MoveBy(
|
MoveBy(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
Vector vector /* 位移向量 */
|
Vector vector /* 移动距离 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 获取该动作的拷贝对象
|
// 获取该动作的拷贝对象
|
||||||
|
|
@ -132,7 +132,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -148,8 +148,8 @@ class MoveTo :
|
||||||
public:
|
public:
|
||||||
// 创建位移动作
|
// 创建位移动作
|
||||||
MoveTo(
|
MoveTo(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
Point pos /* 位移至目标点的坐标 */
|
Point pos /* 目的坐标 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 获取该动作的拷贝对象
|
// 获取该动作的拷贝对象
|
||||||
|
|
@ -164,6 +164,66 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 相对跳跃动作
|
||||||
|
class JumpBy :
|
||||||
|
public ActionGradual
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建相对跳跃动作
|
||||||
|
JumpBy(
|
||||||
|
double duration, /* 持续时长 */
|
||||||
|
const Vector& vec, /* 跳跃距离 */
|
||||||
|
double height, /* 跳跃高度 */
|
||||||
|
int jumps /* 跳跃次数 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取该动作的拷贝对象
|
||||||
|
virtual JumpBy * clone() const override;
|
||||||
|
|
||||||
|
// 获取该动作的倒转
|
||||||
|
virtual JumpBy * reverse() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 初始化动作
|
||||||
|
virtual void _init() override;
|
||||||
|
|
||||||
|
// 更新动作
|
||||||
|
virtual void _update() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Point _startPos;
|
||||||
|
Vector _deltaPos;
|
||||||
|
double _height;
|
||||||
|
int _jumps;
|
||||||
|
Point _prevPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 跳跃动作
|
||||||
|
class JumpTo :
|
||||||
|
public JumpBy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// 创建位移动作
|
||||||
|
JumpTo(
|
||||||
|
double duration, /* 持续时长 */
|
||||||
|
const Point& pos, /* 目的坐标 */
|
||||||
|
double height, /* 跳跃高度 */
|
||||||
|
int jumps /* 跳跃次数 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取该动作的拷贝对象
|
||||||
|
virtual JumpTo * clone() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// 初始化动作
|
||||||
|
virtual void _init() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Point _endPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// 相对缩放动作
|
// 相对缩放动作
|
||||||
class ScaleBy :
|
class ScaleBy :
|
||||||
public ActionGradual
|
public ActionGradual
|
||||||
|
|
@ -171,13 +231,13 @@ class ScaleBy :
|
||||||
public:
|
public:
|
||||||
// 创建相对缩放动作
|
// 创建相对缩放动作
|
||||||
ScaleBy(
|
ScaleBy(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double scale /* 缩放比例变化 */
|
double scale /* 缩放比例变化 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建相对缩放动作
|
// 创建相对缩放动作
|
||||||
ScaleBy(
|
ScaleBy(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double scaleX, /* 横向缩放比例变化 */
|
double scaleX, /* 横向缩放比例变化 */
|
||||||
double scaleY /* 纵向缩放比例变化 */
|
double scaleY /* 纵向缩放比例变化 */
|
||||||
);
|
);
|
||||||
|
|
@ -192,7 +252,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -210,13 +270,13 @@ class ScaleTo :
|
||||||
public:
|
public:
|
||||||
// 创建缩放动作
|
// 创建缩放动作
|
||||||
ScaleTo(
|
ScaleTo(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double scale /* 缩放至目标比例 */
|
double scale /* 缩放至目标比例 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 创建缩放动作
|
// 创建缩放动作
|
||||||
ScaleTo(
|
ScaleTo(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double scaleX, /* 横向缩放至目标比例 */
|
double scaleX, /* 横向缩放至目标比例 */
|
||||||
double scaleY /* 纵向缩放至目标比例 */
|
double scaleY /* 纵向缩放至目标比例 */
|
||||||
);
|
);
|
||||||
|
|
@ -241,7 +301,7 @@ class OpacityBy :
|
||||||
public:
|
public:
|
||||||
// 创建透明度相对渐变动作
|
// 创建透明度相对渐变动作
|
||||||
OpacityBy(
|
OpacityBy(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double opacity /* 透明度相对变化值 */
|
double opacity /* 透明度相对变化值 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -255,7 +315,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -271,7 +331,7 @@ class OpacityTo :
|
||||||
public:
|
public:
|
||||||
// 创建透明度渐变动作
|
// 创建透明度渐变动作
|
||||||
OpacityTo(
|
OpacityTo(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double opacity /* 透明度渐变至目标值 */
|
double opacity /* 透明度渐变至目标值 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -294,7 +354,7 @@ class FadeIn :
|
||||||
public:
|
public:
|
||||||
// 创建淡入动作
|
// 创建淡入动作
|
||||||
FadeIn(
|
FadeIn(
|
||||||
double duration /* 动作持续时长 */
|
double duration /* 持续时长 */
|
||||||
)
|
)
|
||||||
: OpacityTo(duration, 1)
|
: OpacityTo(duration, 1)
|
||||||
{
|
{
|
||||||
|
|
@ -309,7 +369,7 @@ class FadeOut :
|
||||||
public:
|
public:
|
||||||
// 创建淡出动作
|
// 创建淡出动作
|
||||||
FadeOut(
|
FadeOut(
|
||||||
double duration /* 动作持续时长 */
|
double duration /* 持续时长 */
|
||||||
)
|
)
|
||||||
: OpacityTo(duration, 0)
|
: OpacityTo(duration, 0)
|
||||||
{
|
{
|
||||||
|
|
@ -324,7 +384,7 @@ class RotateBy :
|
||||||
public:
|
public:
|
||||||
// 创建相对旋转动作
|
// 创建相对旋转动作
|
||||||
RotateBy(
|
RotateBy(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double rotation /* 旋转角度变化值 */
|
double rotation /* 旋转角度变化值 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -338,7 +398,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -354,7 +414,7 @@ class RotateTo :
|
||||||
public:
|
public:
|
||||||
// 创建旋转动作
|
// 创建旋转动作
|
||||||
RotateTo(
|
RotateTo(
|
||||||
double duration, /* 动作持续时长 */
|
double duration, /* 持续时长 */
|
||||||
double rotation /* 旋转角度至目标值 */
|
double rotation /* 旋转角度至目标值 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -387,7 +447,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -421,7 +481,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
// 重置动作时间
|
// 重置动作时间
|
||||||
|
|
@ -451,7 +511,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -518,7 +578,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
// 重置动作时间
|
// 重置动作时间
|
||||||
|
|
@ -589,7 +649,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
// 重置动作时间
|
// 重置动作时间
|
||||||
|
|
@ -639,7 +699,7 @@ protected:
|
||||||
// 初始化动作
|
// 初始化动作
|
||||||
virtual void _init() override;
|
virtual void _init() override;
|
||||||
|
|
||||||
// 执行动作
|
// 更新动作
|
||||||
virtual void _update() override;
|
virtual void _update() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,8 @@
|
||||||
<ClCompile Include="..\..\core\Action\Action.cpp" />
|
<ClCompile Include="..\..\core\Action\Action.cpp" />
|
||||||
<ClCompile Include="..\..\core\Action\CallFunc.cpp" />
|
<ClCompile Include="..\..\core\Action\CallFunc.cpp" />
|
||||||
<ClCompile Include="..\..\core\Action\Delay.cpp" />
|
<ClCompile Include="..\..\core\Action\Delay.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Action\JumpBy.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Action\JumpTo.cpp" />
|
||||||
<ClCompile Include="..\..\core\Action\MoveBy.cpp" />
|
<ClCompile Include="..\..\core\Action\MoveBy.cpp" />
|
||||||
<ClCompile Include="..\..\core\Action\Animate.cpp" />
|
<ClCompile Include="..\..\core\Action\Animate.cpp" />
|
||||||
<ClCompile Include="..\..\core\Action\MoveTo.cpp" />
|
<ClCompile Include="..\..\core\Action\MoveTo.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,12 @@
|
||||||
<ClCompile Include="..\..\core\Common\Animation.cpp">
|
<ClCompile Include="..\..\core\Common\Animation.cpp">
|
||||||
<Filter>Common</Filter>
|
<Filter>Common</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Action\JumpBy.cpp">
|
||||||
|
<Filter>Action</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Action\JumpTo.cpp">
|
||||||
|
<Filter>Action</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\core\easy2d.h" />
|
<ClInclude Include="..\..\core\easy2d.h" />
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue