SDXFrameWork  0.04
SDXFrameWork
 全て クラス ネームスペース 関数 変数 ページ
Public メソッド | Protected 変数 | すべてのメンバ一覧
クラス SDX::Speed::Accel

加速する. [詳細]

#include <SpeedDerived.h>

SDX::ISpeedを継承しています。

Public メソッド

 Accel (double 初速, double 加速度)
 
void Update ()
 速度を更新. [詳細]
 
void Multi (double 倍率)
 速度を掛ける. [詳細]
 
virtual double Get () const
 現在の速度を取得. [詳細]
 
double Ease ()
 更新後、速度を取得. [詳細]
 
virtual void Add (double 加算値)
 速度を加算する. [詳細]
 

Protected 変数

double speed
 

説明

加速する.

//速度オブジェクトを使う
bool SampleSpeed()
{
using namespace SDX;
System::Initialise("sample", 600, 400);
//位置と形を持った型
std::vector<std::shared_ptr<Shape>> shapes;
shapes.emplace_back(new Circle(0, 50, 10));
shapes.emplace_back(new Rect(0, 150, 20,20));
shapes.emplace_back(new Line(0, 250, PAI/2 , 20, 5));
//変化する数値を表す型
std::vector<std::shared_ptr<ISpeed>> speeds;
speeds.emplace_back(new Speed::Liner(1));//等速
speeds.emplace_back(new Speed::Accel(0,0.01));//加速する
speeds.emplace_back(new Speed::Wave(2, 0.1, 0));//平均√2で進む
while (System::Update())
{
for (int i = 0; i < 3; ++i)
{
//速度を更新する
speeds[i]->Update();
//図形を移動させる
shapes[i]->MoveA(speeds[i]->Get() ,0);
//描画する
shapes[i]->Draw(Color::White, 255);
}
if (Input::key.Return.on) break;//Enterで終了
}
return true;
}
bool SampleSpeed2()
{
using namespace SDX;
System::Initialise("sample", 600, 400);
//図形を宣言
Circle circle(0, 50, 10);
Rect rect(0, 150, 20, 20);
Line line(0, 250, PAI / 2, 20, 5);
//速度オブジェクトを宣言
Speed::Liner liner(1);//等速
Speed::Accel accel(0, 0.01);//加速する
Speed::Wave wave(2, 0.1, 0);//平均√2で進む
while (System::Update())
{
//速度オブジェクトを更新する
liner.Update();
accel.Update();
wave.Update();
//図形を移動する
circle.Move(liner.Get(), 0);
rect.Move(accel.Get(), 0);
line.Move(wave.Get(), 0);
//図形を描画する
circle.Draw(Color::White, 255);
rect.Draw(Color::White, 255);
line.Draw(Color::White, 255);
if (Input::key.Return.on) break;//Enterで終了
}
return true;
}
//Easeing関数的な実装
double GetLiner(double 経過時間, double 初速, double 使わない引数A, double 使わない引数B)
{
return 初速;
}
double GetAccel(double 経過時間, double 初速, double 加速度, double 使わない引数)
{
return 初速 + 経過時間 * 加速度;
}
double GetWave(double 経過時間, double 速度, double 角速度, double 初角)
{
return std::abs(std::sin(経過時間*角速度 + 初角) * 速度);
}
//引数が多いので使えない
double GetWave2(double 経過時間, double 速度, double 加速度, double 角速度, double 初角)
{
return std::abs(std::sin(経過時間*角速度 + 初角) * 速度 + 経過時間 * 加速度);
}
bool SampleSpeed3()
{
using namespace SDX;
System::Initialise("sample", 600, 400);
//図形を宣言
Circle circle(0, 50, 10);
Rect rect(0, 150, 20, 20);
Line line(0, 250, PAI / 2, 20, 5);
double(*pfunc[3])(double,double,double,double);
pfunc[0] = GetLiner;
pfunc[1] = GetAccel;
pfunc[2] = GetWave;
int time = 0;
while (System::Update())
{
++time;
//図形を移動する
circle.Move(pfunc[0](time,1,0,0), 0);
rect.Move(pfunc[1](time, 0, 0.01, 0), 0);
line.Move(pfunc[2](time, 2, 0.1, 0), 0);
//図形を描画する
circle.Draw(Color::White, 255);
rect.Draw(Color::White, 255);
line.Draw(Color::White, 255);
if (Input::key.Return.on) break;//Enterで終了
}
return true;
}

関数

void SDX::Speed::Accel::Update ( )
virtual

速度を更新.

SDX::ISpeedを実装しています。

void SDX::Speed::Accel::Multi ( double  倍率)
virtual

速度を掛ける.

SDX::ISpeedを再定義しています。

virtual double SDX::ISpeed::Get ( ) const
virtualinherited

現在の速度を取得.

SDX::Speed::Waveで再定義されています。

double SDX::ISpeed::Ease ( )
inherited

更新後、速度を取得.

virtual void SDX::ISpeed::Add ( double  加算値)
virtualinherited

速度を加算する.