SDXFrameWork 0.07 SDXFrameWork

- メインページ
- 関連ページ
- クラス

全て クラス ネームスペース 関数 変数 列挙型 列挙型の値 ページ
ModelMove.h
1 #pragma once//☀SDXFramework
2 #include <SDXFrameWork.h>
3
4 namespace SDX
5 {
8 class ModelMove
9 {
10 public:
11 Model *model;
12
13 ModelMove(Model *移動対象):
14 model(移動対象)
15 {}
16
18 void MoveFront(double 速度)
19 {
20 model->MovePolar(速度, model->GetAngle());
21 }
22
24 void MoveBound(double 速度, double &角度, Rect &移動範囲)
25 {
26 //範囲外にいる
27 if (model->GetX() < 移動範囲.GetLeft())
28 {
29 if (角度 > PAI / 2 && 角度 < PAI * 3 / 2)
30 {
31 角度 = -PAI - 角度;
32 }
33 }
34
35 if (model->GetX() > 移動範囲.GetRight())
36 {
37 if (角度 < PAI / 2 || 角度 > PAI * 3 / 2)
38 {
39 角度 = PAI - 角度;
40 }
41 }
42 else if (model->GetY() < 移動範囲.GetTop())
43 {
44 if (角度 > PAI)
45 {
46 角度 = PAI * 2 - 角度;
47 }
48 }
49 else if (model->GetY() > 移動範囲.GetBottom())
50 {
51 if (角度 < PAI)
52 {
53 角度 = -角度;
54 }
55 }
56
57 if (角度 < 0) 角度 += PAI * 2;
58 if (角度 > PAI * 2) 角度 -= PAI * 2;
59
60 model->MovePolar(速度, 角度);
61 }
62
64 bool MoveToPoint(double 速度, double 目標X, double 目標Y)
65 {
66 const double lx = 目標X - model->GetX();
67 const double ly = 目標Y - model->GetY();
68
69 if (lx * lx + ly * ly <= 速度 * 速度)
70 {
71 model->SetPos(目標X, 目標Y);
72 return true;
73 }
74 else{
75 const double angle = atan2(ly, lx);
76 model->MovePolar(速度, angle);
77 return false;
78 }
79 }
80
81 struct MoveCircleState
82 {
83 MoveCircleState(double 初角) :
84 angle(初角)
85 {}
86
87 double angle;
88 double preX;
89 double preY;
90 bool isInit = false;
91 };
92
94 void MoveCircle( double 角速度, MoveCircleState &状態, double 半径X, double 半径Y)
95 {
96 if (!状態.isInit)
97 {
98 状態.preX = cos(状態.angle) * 半径X;
99 状態.preY = sin(状態.angle) * 半径Y;
100 }
101
102 状態.angle += 角速度;
103
104 const double nextX = cos(状態.angle) * 半径X;
105 const double nextY = sin(状態.angle) * 半径Y;
106
107 model->Move(nextX - 状態.preX, nextY - 状態.preY);
108
109 状態.preX = nextX;
110 状態.preY = nextY;
111 }
112
113 struct VibrateState
114 {
115 double moveX = 0;
116 double moveY = 0;
117 };
118
120 void Vibrate(VibrateState &状態, double X振幅, double Y振幅)
121 {
122 状態.moveX = Rand::Get(-X振幅, X振幅) - 状態.moveX;
123 状態.moveY = Rand::Get(-Y振幅, Y振幅) - 状態.moveY;
124 model->Move(状態.moveX, 状態.moveY);
125 }
126 };
127 }
SDX::Model
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
SDX::ModelMove::MoveFront
void MoveFront(double 速度)
Modelの向きに移動.
Definition: ModelMove.h:18
SDX::Rect
矩形を表す図形クラス.
Definition: Shape.h:702
SDX::ModelMove::Vibrate
void Vibrate(VibrateState &状態, double X振幅, double Y振幅)
範囲内でランダムに移動.
Definition: ModelMove.h:120
SDX::ModelMove::MoveToPoint
bool MoveToPoint(double 速度, double 目標X, double 目標Y)
目標座標まで移動.
Definition: ModelMove.h:64
SDX::Model::MovePolar
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:131
SDX::ModelMove::MoveBound
void MoveBound(double 速度, double &角度, Rect &移動範囲)
範囲外に出ると反転する.
Definition: ModelMove.h:24
SDX::Model::GetAngle
double GetAngle()
角度を取得する.
Definition: Model.h:186
SDX::Model::GetY
double GetY() const
Y座標を取得.
Definition: Model.h:229
SDX::Model::Move
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:125
SDX::ModelMove::MoveCircleState
Definition: ModelMove.h:81
SDX::Model::GetX
double GetX() const
X座標を取得.
Definition: Model.h:223
SDX::ModelMove::MoveCircle
void MoveCircle(double 角速度, MoveCircleState &状態, double 半径X, double 半径Y)
円周上を移動.
Definition: ModelMove.h:94
SDX::ModelMove::VibrateState
Definition: ModelMove.h:113
SDX::Rand::Get
static double Get(double 最大値)
0～最大値の乱数を取得.
Definition: Rand.h:22
SDX::ModelMove
Modelの移動を行うクラス.
Definition: ModelMove.h:8
SDX::Model::SetPos
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:137