SDXFrameWork 0.09 SDXFrameWork

- Main Page
- Related Pages
- Classes

All Classes Namespaces Functions Variables Enumerations Enumerator Pages
Motion.h
1 #pragma once//©SDXFramework http://sourceforge.jp/projects/dxframework/
2 #include <SDXFramework.h>
3 #include <Utility/IMotion.h>
4 #include <Framework/Shape.h>
5
6 namespace SDX
7 {
8 namespace MOTION
9 {
10 /*
11 //コピペ用ひな形
12 template <class TSpeed>
13 class Base : public IMotion
14 {
15 MOTION_BASE
16 public:
17 Base(const TSpeed &速度):
18 speed(速度)
19 {}
20
21 void Update(IModel* 移動対象)
22 {
23 移動対象
24 }
25 };
26 */
27
29 template <class TSpeed>
30 class ToFront : public IMotion
31 {
32 private:
33 TSpeed speed;
34 public:
35 ToFront(TSpeed 速度):
36 speed(速度)
37 {}
38
39 void Update(IModel* 移動対象) override
40 {
41 移動対象->MovePolar(speed.Update(),移動対象->GetAngle());
42 }
43 };
44
46 template <class TSpeed>
47 class Bound : public IMotion
48 {
49 private:
50 TSpeed speed;
51 double 進行方向;
52 Rect 移動範囲;
53 public:
54 Bound(const TSpeed &速度,const Rect& 移動範囲,double 進行方向):
55 speed(速度),
56 移動範囲(移動範囲)
57 {}
58
59 void Update(IModel* 移動対象)
60 {
61 //範囲外にいる
62 if (移動対象->GetX() < 移動範囲.GetLeft())
63 {
64 if (進行方向 > PAI / 2 && 進行方向 < PAI * 3 / 2)
65 {
66 進行方向 = -PAI - 進行方向;
67 }
68 }
69
70 if (移動対象->GetX() > 移動範囲.GetRight())
71 {
72 if (進行方向 < PAI / 2 || 進行方向 > PAI * 3 / 2)
73 {
74 進行方向 = PAI - 進行方向;
75 }
76 }
77 else if (移動対象->GetY() < 移動範囲.GetTop())
78 {
79 if (進行方向 > PAI)
80 {
81 進行方向 = PAI * 2 - 進行方向;
82 }
83 }
84 else if (移動対象->GetY() > 移動範囲.GetBottom())
85 {
86 if (進行方向 < PAI)
87 {
88 進行方向 = -進行方向;
89 }
90 }
91
92 if (進行方向 < 0) 進行方向 += PAI * 2;
93 if (進行方向 > PAI * 2) 進行方向 -= PAI * 2;
94
95 移動対象->MovePolar(speed.Update() , 進行方向);
96 }
97 };
98
100 template <class TSpeed>
101 class ToPoint : public IMotion
102 {
103 private:
104 TSpeed speed;
105 Point 目標座標;
106 public:
107 ToPoint(const TSpeed &速度 , const Point& 目標座標):
108 speed(速度),
109 目標座標(目標座標)
110 {}
111
112 void Update(IModel* 移動対象)
113 {
114 //移動対象
115 const double nowSpeed = speed.Update();
116 const double lx = 目標座標.GetX() - 移動対象->GetX();
117 const double ly = 目標座標.GetY() - 移動対象->GetY();
118
119 if (lx * lx + ly * ly <= nowSpeed * nowSpeed)
120 {
121 移動対象->SetPos(目標座標.GetX(),目標座標.GetY() );
122 }else{
123 const double angle = atan2(ly, lx);
124 移動対象->MovePolar( nowSpeed , angle);
125 }
126 }
127 };
128
130 template <class TSpeed>
131 class Orbit: public IMotion
132 {
133 private:
134 TSpeed speed;
135 Point 軌道中心;
136 double 角度;
137 double 半径X;
138 double 半径Y;
139
140 Point 前座標;
141 public:
142 Orbit(const TSpeed &速度):
143 speed(速度),
144 前座標(0,0)
145 {}
146
147 void Update(IModel* 移動対象)
148 {
149 //移動対象
150 角度 += speed.Update();
151
152 const double nextX = cos(角度) * 半径X;
153 const double nextY = sin(角度) * 半径Y;
154
155 移動対象->Move(nextX - 前座標.GetX() , nextY - 前座標.GetX() );
156
157 前座標.SetPos(nextX,nextY);
158 }
159 };
160
162 class Vibrate : public IMotion
163 {
164 private:
165 double 最大振れ幅;
166 double 前振れ幅X = 0;
167 double 前振れ幅Y = 0;
168 public:
169 Vibrate(double 最大振れ幅):
170 最大振れ幅(最大振れ幅)
171 {}
172
173 void Update(IModel* 移動対象)
174 {
175 //移動対象
176 double 振れ幅 = 最大振れ幅;
177 前振れ幅X = Rand::Get(-振れ幅, 振れ幅) - 前振れ幅X;
178 前振れ幅X = Rand::Get(-振れ幅, 振れ幅) - 前振れ幅X;
179 移動対象->Move(前振れ幅X, 前振れ幅Y);
180 }
181 };
182 }
183 }
SDX::MOTION::ToPoint
目標座標に移動.
Definition: Motion.h:101
SDX::Rect
矩形を表す図形クラス.
Definition: Shape.h:536
SDX::Point::GetY
double GetY() const
Y座標を取得.
Definition: Shape.h:176
SDX::IModel::GetY
double GetY() const
Y座標を取得.
Definition: Model.h:188
SDX::MOTION::Orbit
円周上を移動.
Definition: Motion.h:131
SDX::Point
点を表す図形クラス.
Definition: Shape.h:129
SDX::Point::GetX
double GetX() const
X座標を取得.
Definition: Shape.h:171
SDX::MOTION::IMotion
Modelの移動方法.
Definition: IMotion.h:13
SDX::IModel::GetAngle
double GetAngle()
角度を取得する.
Definition: Model.h:151
SDX::Point::SetPos
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Shape.h:159
SDX::IModel::Move
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:98
SDX::MOTION::Bound
範囲内で跳ね返る.
Definition: Motion.h:47
SDX::IModel::MovePolar
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:104
SDX::MOTION::ToFront
前方に移動.
Definition: Motion.h:30
SDX::MOTION::Vibrate
範囲内で振動.
Definition: Motion.h:162
SDX::IModel
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
SDX::Rand::Get
static double Get(double 最大値)
0～最大値の乱数を取得.
Definition: Rand.h:22
SDX::IModel::GetX
double GetX() const
X座標を取得.
Definition: Model.h:182
SDX::IModel::SetPos
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:110