add ActionCustom

This commit is contained in:
Nomango 2019-06-12 13:24:04 +08:00 committed by Nomango
parent 5c1878bd46
commit b4a37d0714
3 changed files with 73 additions and 5 deletions

View File

@ -205,6 +205,12 @@ namespace kiwano
return TweenHelper(new kiwano::Animation(0, frames)); return TweenHelper(new kiwano::Animation(0, frames));
} }
static inline TweenHelper
Custom(kiwano::ActionCustom::TweenFunc tween_func)
{
return TweenHelper(new kiwano::ActionCustom(0, tween_func));
}
static inline ActionHelper static inline ActionHelper
Delay(Duration delay) Delay(Duration delay)
{ {

View File

@ -259,16 +259,16 @@ namespace kiwano
ActionScaleBy::ActionScaleBy(Duration duration, float scale, EaseFunc func) ActionScaleBy::ActionScaleBy(Duration duration, float scale, EaseFunc func)
: ActionTween(duration, func) : ActionTween(duration, func)
, delta_x_(scale)
, delta_y_(scale)
{ {
delta_x_ = scale;
delta_y_ = scale;
} }
ActionScaleBy::ActionScaleBy(Duration duration, float scale_x, float scale_y, EaseFunc func) ActionScaleBy::ActionScaleBy(Duration duration, float scale_x, float scale_y, EaseFunc func)
: ActionTween(duration, func) : ActionTween(duration, func)
, delta_x_(scale_x)
, delta_y_(scale_y)
{ {
delta_x_ = scale_x;
delta_y_ = scale_y;
} }
void ActionScaleBy::Init(NodePtr target) void ActionScaleBy::Init(NodePtr target)
@ -328,8 +328,8 @@ namespace kiwano
ActionOpacityBy::ActionOpacityBy(Duration duration, float opacity, EaseFunc func) ActionOpacityBy::ActionOpacityBy(Duration duration, float opacity, EaseFunc func)
: ActionTween(duration, func) : ActionTween(duration, func)
, delta_val_(opacity)
{ {
delta_val_ = opacity;
} }
void ActionOpacityBy::Init(NodePtr target) void ActionOpacityBy::Init(NodePtr target)
@ -389,6 +389,7 @@ namespace kiwano
ActionRotateBy::ActionRotateBy(Duration duration, float rotation, EaseFunc func) ActionRotateBy::ActionRotateBy(Duration duration, float rotation, EaseFunc func)
: ActionTween(duration, func) : ActionTween(duration, func)
, start_val_()
, delta_val_(rotation) , delta_val_(rotation)
{ {
} }
@ -485,6 +486,34 @@ namespace kiwano
} }
//-------------------------------------------------------
// ActionCustom
//-------------------------------------------------------
ActionCustom::ActionCustom(Duration duration, TweenFunc tween_func, EaseFunc func)
: ActionTween(duration, func)
, tween_func_(tween_func)
{
}
ActionPtr ActionCustom::Clone() const
{
return new ActionCustom(dur_, tween_func_);
}
void ActionCustom::Init(NodePtr target)
{
if (!tween_func_)
this->Done();
}
void ActionCustom::UpdateTween(NodePtr target, float percent)
{
if (tween_func_)
tween_func_(target, percent);
}
//------------------------------------------------------- //-------------------------------------------------------
// ActionDelay // ActionDelay
//------------------------------------------------------- //-------------------------------------------------------

View File

@ -470,6 +470,39 @@ namespace kiwano
}; };
// 自定义动作
class KGE_API ActionCustom
: public ActionTween
{
public:
using TweenFunc = Closure<void(NodePtr, float)>;
ActionCustom(
Duration duration, /* 持续时长 */
TweenFunc tween_func, /* 过程函数 */
EaseFunc func = nullptr /* 速度变化 */
);
// 获取该动作的拷贝对象
ActionPtr Clone() const override;
// 获取该动作的倒转
ActionPtr Reverse() const override
{
KGE_ERROR_LOG(L"Reverse() not supported in ActionCustom");
return nullptr;
}
protected:
void Init(NodePtr target) override;
void UpdateTween(NodePtr target, float percent) override;
protected:
TweenFunc tween_func_;
};
// 延时动作 // 延时动作
class KGE_API ActionDelay class KGE_API ActionDelay
: public Action : public Action