add: RotationTransition

This commit is contained in:
Nomango 2018-09-11 15:12:25 +08:00
parent a626e488de
commit 93c701751d
16 changed files with 162 additions and 61 deletions

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#ifndef WINVER #ifndef WINVER
# define WINVER 0x0700 // Allow use of features specific to Windows 7 or later # define WINVER 0x0700 // Allow use of features specific to Windows 7 or later
#endif #endif
#ifndef _WIN32_WINNT #ifndef _WIN32_WINNT

View File

@ -84,7 +84,7 @@ namespace e2d
{ {
public: public:
explicit EmergeTransition( explicit EmergeTransition(
float duration /* 浮现动画持续时长 */ float duration /* 动画持续时长 */
); );
protected: protected:
@ -116,14 +116,14 @@ namespace e2d
}; };
// 过渡 // 移过渡
class MoveTransition class MoveTransition
: public Transition : public Transition
{ {
public: public:
explicit MoveTransition( explicit MoveTransition(
float moveDuration, /* 场景移动动画持续时长 */ float moveDuration, /* 动画持续时长 */
Direction direction = Direction::Left /* 场景移动方向 */ Direction direction = Direction::Left /* 移动方向 */
); );
protected: protected:
@ -142,4 +142,29 @@ namespace e2d
Point start_pos_; Point start_pos_;
}; };
// 旋转过渡
class RotationTransition
: public Transition
{
public:
explicit MoveTransition(
float moveDuration, /* 动画持续时长 */
float rotation = 360 /* 旋转度数 */
);
protected:
virtual void Update() override;
virtual void Init(
Scene * prev,
Scene * next
) override;
virtual void Reset() override;
protected:
float rotation_;
}
} }

View File

@ -3,7 +3,7 @@
#ifndef SAFE_DELETE #ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if (p) { delete (p); (p)=nullptr; } } #define SAFE_DELETE(p) { if (p) { delete (p); (p)=nullptr; } }
#endif #endif
#ifndef SAFE_DELETE_ARRAY #ifndef SAFE_DELETE_ARRAY

View File

@ -1,6 +1,4 @@
#include "..\e2dtransition.h" #include "..\e2dtransition.h"
#include "..\e2dobject.h"
#include "..\e2dmodule.h"
e2d::BoxTransition::BoxTransition(float duration) e2d::BoxTransition::BoxTransition(float duration)
: Transition(duration) : Transition(duration)
@ -18,14 +16,13 @@ void e2d::BoxTransition::Update()
{ {
Transition::Update(); Transition::Update();
auto size = Window::GetInstance()->GetSize(); if (process_ < .5f)
if (delta_ <= 0.5)
{ {
out_layer_param_.contentBounds = D2D1::RectF( out_layer_param_.contentBounds = D2D1::RectF(
size.width * delta_, window_size_.width * process_,
size.height * delta_, window_size_.height * process_,
size.width * (1 - delta_), window_size_.width * (1 - process_),
size.height * (1 - delta_) window_size_.height * (1 - process_)
); );
} }
else else
@ -33,14 +30,10 @@ void e2d::BoxTransition::Update()
out_layer_param_.opacity = 0; out_layer_param_.opacity = 0;
in_layer_param_.opacity = 1; in_layer_param_.opacity = 1;
in_layer_param_.contentBounds = D2D1::RectF( in_layer_param_.contentBounds = D2D1::RectF(
size.width * (1 - delta_), window_size_.width * (1 - process_),
size.height * (1 - delta_), window_size_.height * (1 - process_),
size.width * delta_, window_size_.width * process_,
size.height * delta_ window_size_.height * process_
); );
if (delta_ >= 1)
{
this->Stop();
}
} }
} }

View File

@ -18,11 +18,6 @@ void e2d::EmergeTransition::Update()
{ {
Transition::Update(); Transition::Update();
out_layer_param_.opacity = 1 - delta_; out_layer_param_.opacity = 1 - process_;
in_layer_param_.opacity = delta_; in_layer_param_.opacity = process_;
if (delta_ >= 1)
{
this->Stop();
}
} }

View File

@ -18,18 +18,14 @@ void e2d::FadeTransition::Update()
{ {
Transition::Update(); Transition::Update();
if (delta_ < 0.5) if (process_ < 0.5)
{ {
out_layer_param_.opacity = 1 - delta_ * 2; out_layer_param_.opacity = 1 - process_ * 2;
in_layer_param_.opacity = 0; in_layer_param_.opacity = 0;
} }
else else
{ {
out_layer_param_.opacity = 0; out_layer_param_.opacity = 0;
in_layer_param_.opacity = (delta_ - 0.5f) * 2; in_layer_param_.opacity = (process_ - 0.5f) * 2;
if (delta_ >= 1)
{
this->Stop();
}
} }
} }

View File

@ -1,6 +1,4 @@
#include "..\e2dtransition.h" #include "..\e2dtransition.h"
#include "..\e2dobject.h"
#include "..\e2dmodule.h"
e2d::MoveTransition::MoveTransition(float duration, Direction direction) e2d::MoveTransition::MoveTransition(float duration, Direction direction)
: Transition(duration) : Transition(duration)
@ -12,25 +10,24 @@ void e2d::MoveTransition::Init(Scene * prev, Scene * next)
{ {
Transition::Init(prev, next); Transition::Init(prev, next);
if (direction_ == Direction::Up) switch (direction_)
{ {
case Direction::Up:
pos_delta_ = Point(0, -window_size_.height); pos_delta_ = Point(0, -window_size_.height);
start_pos_ = Point(0, window_size_.height); start_pos_ = Point(0, window_size_.height);
} break;
else if (direction_ == Direction::Down) case Direction::Down:
{
pos_delta_ = Point(0, window_size_.height); pos_delta_ = Point(0, window_size_.height);
start_pos_ = Point(0, -window_size_.height); start_pos_ = Point(0, -window_size_.height);
} break;
else if (direction_ == Direction::Left) case Direction::Left:
{
pos_delta_ = Point(-window_size_.width, 0); pos_delta_ = Point(-window_size_.width, 0);
start_pos_ = Point(window_size_.width, 0); start_pos_ = Point(window_size_.width, 0);
} break;
else if (direction_ == Direction::Right) case Direction::Right:
{
pos_delta_ = Point(window_size_.width, 0); pos_delta_ = Point(window_size_.width, 0);
start_pos_ = Point(-window_size_.width, 0); start_pos_ = Point(-window_size_.width, 0);
break;
} }
if (out_scene_) if (out_scene_)
@ -55,7 +52,7 @@ void e2d::MoveTransition::Update()
if (out_scene_) if (out_scene_)
{ {
auto translation = pos_delta_ * delta_; auto translation = pos_delta_ * process_;
out_scene_->SetTransform( out_scene_->SetTransform(
D2D1::Matrix3x2F::Translation( D2D1::Matrix3x2F::Translation(
translation.x, translation.x,
@ -66,7 +63,7 @@ void e2d::MoveTransition::Update()
if (in_scene_) if (in_scene_)
{ {
auto translation = start_pos_ + pos_delta_ * delta_; auto translation = start_pos_ + pos_delta_ * process_;
in_scene_->SetTransform( in_scene_->SetTransform(
D2D1::Matrix3x2F::Translation( D2D1::Matrix3x2F::Translation(
translation.x, translation.x,
@ -74,11 +71,6 @@ void e2d::MoveTransition::Update()
) )
); );
} }
if (delta_ >= 1)
{
this->Stop();
}
} }
void e2d::MoveTransition::Reset() void e2d::MoveTransition::Reset()

View File

@ -0,0 +1,83 @@
#include "..\e2dtransition.h"
e2d::RotationTransition::RotationTransition(float duration, float rotation)
: Transition(duration)
, rotation_(rotation)
{
}
void e2d::RotationTransition::Init(Scene * prev, Scene * next)
{
Transition::Init(prev, next);
if (out_scene_)
{
out_scene_->SetTransform(D2D1::Matrix3x2F::Identity());
}
if (in_scene_)
{
in_scene_->SetTransform(D2D1::Matrix3x2F::Identity());
}
in_layer_param_.opacity = 0;
}
void e2d::RotationTransition::Update()
{
Transition::Update();
auto center_pos = D2D1::Point2F(
window_size_.width / 2,
window_size_.height / 2
);
if (process_ < .5f)
{
if (out_scene_)
{
out_scene_->SetTransform(
D2D1::Matrix3x2F::Scale(
(.5f - process_) * 2,
(.5f - process_) * 2,
center_pos
) * D2D1::Matrix3x2F::Rotation(
rotation * (.5f - process_) * 2,
center_pos,
)
);
}
}
else
{
if (in_scene_)
{
out_layer_param_.opacity = 0;
in_layer_param_.opacity = 1;
in_scene_->SetTransform(
D2D1::Matrix3x2F::Scale(
(process_ - .5f) * 2,
(process_ - .5f) * 2,
center_pos
) * D2D1::Matrix3x2F::Rotation(
rotation * (process_ - .5f) * 2,
center_pos,
)
);
}
}
}
void e2d::RotationTransition::Reset()
{
if (out_scene_)
{
out_scene_->SetTransform(D2D1::Matrix3x2F::Identity());
}
if (in_scene_)
{
in_scene_->SetTransform(D2D1::Matrix3x2F::Identity());
}
}

View File

@ -5,7 +5,7 @@
e2d::Transition::Transition(float duration) e2d::Transition::Transition(float duration)
: done_(false) : done_(false)
, started_() , started_()
, delta_(0) , process_(0)
, window_size_() , window_size_()
, out_scene_(nullptr) , out_scene_(nullptr)
, in_scene_(nullptr) , in_scene_(nullptr)
@ -78,12 +78,17 @@ void e2d::Transition::Update()
{ {
if (duration_ == 0) if (duration_ == 0)
{ {
delta_ = 1; process_ = 1;
} }
else else
{ {
delta_ = (Time::Now() - started_).Seconds() / duration_; process_ = (Time::Now() - started_).Seconds() / duration_;
delta_ = std::min(delta_, 1.f); process_ = std::min(process_, 1.f);
}
if (process_ >= 1)
{
this->Stop();
} }
} }

View File

@ -49,7 +49,7 @@ bool e2d::Rect::ContainsPoint(const Point& point) const
bool e2d::Rect::Intersects(const Rect& rect) const bool e2d::Rect::Intersects(const Rect& rect) const
{ {
return !((origin.x + size.width) < rect.origin.x || return !((origin.x + size.width) < rect.origin.x ||
(rect.origin.x + rect.size.width) < origin.x || (rect.origin.x + rect.size.width) < origin.x ||
(origin.y + size.height) < rect.origin.y || (origin.y + size.height) < rect.origin.y ||
(rect.origin.y + rect.size.height) < origin.y); (rect.origin.y + rect.size.height) < origin.y);
} }

View File

@ -72,6 +72,7 @@
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\FadeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\FadeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp" /> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp" />
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp" />
<ClCompile Include="..\..\core\transitions\Transition.cpp" /> <ClCompile Include="..\..\core\transitions\Transition.cpp" />
<ClCompile Include="..\..\core\utils\Color.cpp" /> <ClCompile Include="..\..\core\utils\Color.cpp" />
<ClCompile Include="..\..\core\utils\Duration.cpp" /> <ClCompile Include="..\..\core\utils\Duration.cpp" />

View File

@ -198,6 +198,9 @@
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp"> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp">
<Filter>transitions</Filter>
</ClCompile>
<ClCompile Include="..\..\core\transitions\Transition.cpp"> <ClCompile Include="..\..\core\transitions\Transition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>

View File

@ -216,6 +216,7 @@
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\FadeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\FadeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp" /> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp" />
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp" />
<ClCompile Include="..\..\core\transitions\Transition.cpp" /> <ClCompile Include="..\..\core\transitions\Transition.cpp" />
<ClCompile Include="..\..\core\utils\Color.cpp" /> <ClCompile Include="..\..\core\utils\Color.cpp" />
<ClCompile Include="..\..\core\utils\Duration.cpp" /> <ClCompile Include="..\..\core\utils\Duration.cpp" />

View File

@ -198,6 +198,9 @@
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp"> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp">
<Filter>transitions</Filter>
</ClCompile>
<ClCompile Include="..\..\core\transitions\Transition.cpp"> <ClCompile Include="..\..\core\transitions\Transition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>

View File

@ -249,6 +249,7 @@
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\FadeTransition.cpp" /> <ClCompile Include="..\..\core\transitions\FadeTransition.cpp" />
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp" /> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp" />
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp" />
<ClCompile Include="..\..\core\transitions\Transition.cpp" /> <ClCompile Include="..\..\core\transitions\Transition.cpp" />
<ClCompile Include="..\..\core\utils\Color.cpp" /> <ClCompile Include="..\..\core\utils\Color.cpp" />
<ClCompile Include="..\..\core\utils\Duration.cpp" /> <ClCompile Include="..\..\core\utils\Duration.cpp" />

View File

@ -198,6 +198,9 @@
<ClCompile Include="..\..\core\transitions\MoveTransition.cpp"> <ClCompile Include="..\..\core\transitions\MoveTransition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\transitions\RotationTransition.cpp">
<Filter>transitions</Filter>
</ClCompile>
<ClCompile Include="..\..\core\transitions\Transition.cpp"> <ClCompile Include="..\..\core\transitions\Transition.cpp">
<Filter>transitions</Filter> <Filter>transitions</Filter>
</ClCompile> </ClCompile>