STGで敵や弾・自機などの描画順を自由に行いたい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

STGで敵や弾・自機などの描画順を自由に行いたい。

#1

投稿記事 by YYSS » 8年前

こんばんわは。

表題の件、現在製作しているSTGでは、

背景 -> 敵 -> 自機 -> エフェクト -> 敵弾 -> スコアフレーム
         奥    - - - - - >   前面

の順に描画しているのですが、今考えている演出で、
敵が前面から登場し自機の上(重なったときに自機が隠れる)を通らせたいと考えているのですが、
なかなか良い方法が思いつきません。


敵はクラスの配列で管理しています。
現在はこんな感じの描画方法です。(イメージ)

コード:

	C_Enemy  Zako[ 100 ];	//敵クラス
	C_Player  Player;		//自機クラス

	//描画
	Zako.DrawProcess();		//全ての敵を先に描画
	Plauer.DrawProcess();	//敵の上に自機が描画される
これだと、どうがんばっても敵を自機の上に描画できないので
レイヤー分けをして描画しようと考えました。

メンバー変数にレイヤーを記憶する変数を追加し

コード:

	//描画
	for( int i=0 ; i<10 ; i++ ){
		Zako.DrawProcess( i );	//引数で指定されたレイヤーのみを表示
		Plauer.DrawProcess( i );
	}

コード:

void C_Enemy::DrawProcess( int layer ){

	for( int i=0 ; i<ENEMY_MAX ; i++ ){
		//敵オブジェクトのレイヤーと引数がおなじなら描画
		if( layer == m_Layer ){
			Draw();	//敵を描画
		}
	}	
}
とやれば解決なのですが、すごく無駄が多いような気がします。
空のループを何回も回す場合も出てくるので、必要最低限のループで描画できるとベストなのですが・・・

STLのmapでソートするのも考えましたが、
毎フレーム、ソートするととても処理が間に合わなかったので;;


何かアドバイスを下さると幸いです。


開発環境は、
 Windows 7 Ultimate SP1 64bit
 Visual C++ 2010
 DXライブラリ

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: STGで敵や弾・自機などの描画順を自由に行いたい。

#2

投稿記事 by h2so5 » 8年前

一時的な演出なら、その時だけなにかフラグをたてて分岐すればいいんじゃないでしょうか。

コード:

    if (reverse_flag) {
        Plauer.DrawProcess();
        Zako.DrawProcess();
    } else {
        Zako.DrawProcess();
        Plauer.DrawProcess();
    }

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

Re: STGで敵や弾・自機などの描画順を自由に行いたい。

#3

投稿記事 by YYSS » 8年前

h2so5 さんが書きました:一時的な演出なら、その時だけなにかフラグをたてて分岐すればいいんじゃないでしょうか。

コード:

    if (reverse_flag) {
        Plauer.DrawProcess();
        Zako.DrawProcess();
    } else {
        Zako.DrawProcess();
        Plauer.DrawProcess();
    }
変に大掛かりにせず、一時的に分岐するようにしたらうまくいきました。

深く考えすぎていたようです;;

ありがとうございましたー

閉鎖

“C言語何でも質問掲示板” へ戻る