2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[覚書] 残像

Last updated at Posted at 2013-05-28

ゲーム制作しつつ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);
}

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?