ゲーム制作しつつC++の勉強中
VisualStudio2010を使ってるけどほんともうやだ
残像処理がそれなりに綺麗にかけたのでメモ
dequeにはtupleを入れるほうがいいんだろうか…
自分のゲームのソースから抜き出してるのでところどころ変なところがあるかもしれません。
class Hoge{
public:
void Move();
void Draw();
private:
///残像描画関数
void _spectrum_draw(const b2Vec2 v, const float r, const float ex );
///関数を入れていく
std::deque< std::function< void() > > _spectrum;
};
int Hoge::Move(){
//座標情報
const b2Vec2 v = GetPosition(); //<自身の座標を取得
//角度
const float r = GetRadian(); //<自身の角度を...
//拡大率
const float ex = 2.2f; //<描画したいサイズを...
//キューのサイズを決めている
const int max = 10;
//キューが10を超えたら削る
if( _spectrum.size() > max )
_spectrum.pop_back();
//残像を引数束縛してキューへ
_spectrum.push_front( std::bind( &Hoge::_spectrum_draw, this , v,r,ex) );
return 0;
}
void Hoge::Draw(){
//残像描画(AlphaBlendとかいれるといい)
BOOST_FOREACH( auto f, _spectrum ){f();}
//このあとに普通の描画とか…
return 0;
}
Hoge::_spectrum_draw( const b2Vec2 v, const float r, const float ex ){
//自身を描画する
draw(v,ex,r);
}
##追記
コメントで
std::dequeの代わりにboost::circular_bufferを使っても良いかもしれませんね。
と教わったため、変更。
dequeから削除するための処理がなくなって綺麗になりました。
ありがとうございます。
class Hoge{
public:
Hoge(): _spectrum(10){}
void Move();
void Draw();
private:
///残像描画関数
void _spectrum_draw(const b2Vec2 v, const float r, const float ex );
///関数を入れていく
boost::circular_buffer< std::function< void() > > _spectrum;
};
int Hoge::Move(){
//座標情報
const b2Vec2 v = GetPosition(); //<自身の座標を取得
//角度
const float r = GetRadian(); //<自身の角度を...
//拡大率
const float ex = 2.2f; //<描画したいサイズを...
//残像を引数束縛してキューへ
_spectrum.push_back( std::bind( &Hoge::_spectrum_draw, this , v,r,ex) );
return 0;
}
void Hoge::Draw(){
//残像描画(AlphaBlendとかいれるといい)
BOOST_FOREACH( auto f, _spectrum ){f();}
//このあとに普通の描画とか…
return 0;
}
Hoge::_spectrum_draw( const b2Vec2 v, const float r, const float ex ){
//自身を描画する
draw(v,ex,r);
}