20章の背景のところなのですが・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mi_l

20章の背景のところなのですが・・・

#1

投稿記事 by mi_l » 13年前

20章の背景で困っています。

背景は無事に表示できました(正確には背景の画像です)
しかし、背景の画像が最前面になっているのかキャラや敵が見えなくなりました、効果音はしっかりでていますが・・

一応描画のところに問題があると思うのですがどこかおかしいでしょうか?

コード:

#include "../include/GV.h"



//敵
void graph_enemy(){
        int i;
        for(i=0;i<ENEMY_MAX;i++){
                if(enemy[i].flag==1){
                        DrawRotaGraphF(enemy[i].x+FIELD_X,enemy[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
                }
        }
}

//自機
void graph_ch(){
        DrawRotaGraphF(ch.x+FIELD_X,ch.y+FIELD_Y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}

//ボード
void graph_board(){
        DrawGraph(  0,  0,img_board[10],FALSE);
        DrawGraph(  0, 16,img_board[11],FALSE);
        DrawGraph(  0,464,img_board[12],FALSE);
        DrawGraph(416,  0,img_board[20],FALSE);
}

//弾丸の描画
void graph_bullet()
{
	int i , j;
	SetDrawMode( DX_DRAWMODE_BILINEAR );//線形補完描画
	for( i=0 ; i<SHOT_MAX ; i++ )//敵弾幕数分ループする
	{
		if( shot[i].flag > 0 )//弾幕データがオンなら
		{
			for( j=0 ; j<SHOT_BULLET_MAX ; j++ )//その弾幕が持つ弾の最大数分ループ
			{
				if( shot[i].bullet[j].flag != 0 )//弾データがオンなら
				{
					if( shot[i].bullet[j].eff == 1 )
							SetDrawBlendMode( DX_BLENDMODE_ADD , 255 );
					DrawRotaGraphF( shot[i].bullet[j].x+FIELD_X , shot[i].bullet[j].y+FIELD_Y,
										1.0 , shot[i].bullet[j].angle+PI/2 ,
										img_bullet[ shot[i].bullet[j].knd ][ shot[i].bullet[j].col ] , TRUE );
					if( shot[i].bullet[j].eff == 1 )
						SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 );
				}
			}
		}
	}
	SetDrawMode( DX_DRAWMODE_NEAREST );//描画形式を戻す
}

//自機ショット画像
void graph_cshot()
{
	for( int i=0 ; i < CSHOT_MAX ; i++ )
	{
		if( cshot[i].flag > 0 )
		{
			DrawRotaGraphF( cshot[i].x+FIELD_X , cshot[i].y+FIELD_Y , 1 , 0 , img_cshot[cshot[i].knd] , TRUE);
		}
	}
}

void graph_effect()
{
    for(int i=0;i<EFFECT_MAX;i++)
	{
        if(effect[i].flag>0)
		{
            if(effect[i].eff==1)//エフェクトが光エフェクトなら
                SetDrawBlendMode( DX_BLENDMODE_ADD, effect[i].brt) ;

            DrawRotaGraphF(effect[i].x+FIELD_X,effect[i].y+FIELD_Y,effect[i].r,effect[i].ang,effect[i].img,TRUE);

            if(effect[i].eff==1)
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
        }
    }
}

extern void graph_back_main();



void graph_main(){
		graph_effect();
        graph_enemy();
		graph_cshot();
        graph_ch();
		graph_bullet();
        graph_board();
		graph_back_main();
		
}
externの部分を一番上に書いても直りませんでした・・・

それと、なぜ変更点にeffect_main()があるのですか?この章では触れていないとおもうのですが・・・

翡翠
記事: 6
登録日時: 14年前

Re: 20章の背景のところなのですが・・・

#2

投稿記事 by 翡翠 » 13年前

最後に背景を描画してしまっているので、
それより前に描画した自機や弾が見えなくなっていますね
graph_back_main(); を graph_effect(); の前の行に移すことで解決すると思います

effect_main()に関しては、19章のコピペ時に残ってしまったのかな?

mi_l

Re: 20章の背景のところなのですが・・・

#3

投稿記事 by mi_l » 13年前

早い回答ありがとうございます。
直りました!!
てっきり最後に書いたのが最背面になると思ってました・・・・

エフェクトの部分は・・・ふむ・・・

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: 20章の背景のところなのですが・・・

#4

投稿記事 by beatle » 13年前

紙に油絵の具を塗るのを想像してください。
既に描いてある絵に重ねて塗れば、後に描いた方が上に来ますね?
コンピュータでの描画順序もそれと同じです。

閉鎖

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