Magic_Game/samples/Samples/Demo1.h

56 lines
1.3 KiB
C++

// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
class Demo1
: public Scene
{
public:
static ScenePtr Create(ResLoader* loader)
{
return new Demo1(loader);
}
Demo1(ResLoader* loader)
{
// 获取人物图片
ImagePtr man_image = loader->GetImage(L"man");
// 缓动方程
auto ease_functions = {
Ease::Linear, // 线性变化
Ease::EaseInOut, // 变化过程中有缓冲
Ease::ExpoInOut, // 在开始和结束阶段非常慢,但过程非常快
Ease::BounceInOut, // 在开始和结束阶段均赋予弹性
Ease::BackInOut // 开始和结束阶段均有一个短暂的反方向运动
};
float height = 100.f;
for (auto& func : ease_functions)
{
SpritePtr man = new Sprite(man_image);
man->SetPosition(100, height);
man->SetScale(0.5f, 0.3f);
this->AddChild(man);
// 重置人物位置函数
auto reset_pos = [ptr = man.Get()]() { ptr->Move(-350, 0); };
// 执行动画
man->AddAction(
Tween::Group({ // Tween::Group 组合动画
Tween::MoveBy(Point{ 350, 0 }) // Tween::MoveBy 横向位移 350 像素
.SetDuration(4000) // 设置位移时间为 4 秒
.SetEaseFunc(func), // 设置缓动函数
Tween::Delay(1000) // Tween::Delay 延迟 1 秒
})
.SetLoops(-1) // 无限循环执行
.SetLoopDoneCallback(reset_pos) // 设置每次循环结束都重置人物位置
);
height += 60.f;
}
}
};