画像の描画についての質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sakuranote
記事: 1
登録日時: 9年前
住所: 新潟市

画像の描画についての質問

#1

投稿記事 by sakuranote » 9年前

簡単な横スクロールゲームを制作中なのですが、キャラクターと背景の描画の部分で、キャラクターが背景の裏で描画されている状態になってしまいます。
それぞれの描画は、一度別々のプログラムで実行して確認済みです。
キャラクターはpngの透過性あり , 背景にはbmpのマップチップを使用しています。

ステージの画像読み込み

コード:

//上部省略
oid stage1Init(bool flg)  //
{
	if(flg == true)
	{
		LoadDivGraph("IMAGE\\mapchip(stage1).bmp",36,9,4,32,32,MapChip); //画像を分割読み込み
	}
}

void stage1mapdata()		
{
	//マップの描画処理
	for(y=0; y<MAP_Y; y++)
	{
		for(x=0; x<MAP_X; x++)
		DrawGraph(x*MAPCHIP_SIZE,y*MAPCHIP_SIZE,MapChip[stage1data[y][x]],false);//
	}
}
キャラクター画像読み込み

コード:

void charInit(bool flg)
{
	if(flg == true)
	{
		charpic = LoadGraph("IMAGE\\キャラクタ2.png");
		
	}
    xpos = 0;
	ypos = 230;
}


//キャラ動作 
void charmove()
{

	if(CheckHitKey(KEY_INPUT_LEFT))		//左キーが押されたときの処理
	{
		charpic = LoadGraph("IMAGE\\キャラクタ1.png");
	
		xpos -= 5;	
	}
	if(CheckHitKey(KEY_INPUT_RIGHT))	//右キーが押されたときの処理
	{
		charpic = LoadGraph("IMAGE\\キャラクタ2.png");
		
		xpos += 5;
	}
	DrawGraph(xpos,ypos,charpic,true);	
}
上2つのプログラムをヘッダーファイルを使用してメインのプログラムへ送るようにしています
私は、c言語の基礎を覚えたばかりなので詳しいことがわからないので、よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 画像の描画についての質問

#2

投稿記事 by softya(ソフト屋) » 9年前

画像の重ね合わせ順番はDrawGraphの順番で決まりますので、charmove()とstage1mapdata()を呼び出す順番が逆じゃないでしょうか?
それとcharmove()内でキーを押す度に画像をロードしてますが、これはメモリリーク(メモリの無駄な消費)ですのでやめたほうが良いです。DXライブラリの画像読み込み数の限界に達すると忘れた頃に異常終了します。処理落ちの原因にもなります。
charInit()で読み込んで画像ハンドルを別変数に入れておいたほうが良いでしょう。char1pic,char2picなど。

【補足】
stage1mapdata()と言う名前が関数意図が分かりづらいのでstage1draw()をおすすめします。
それとcharmove()も移動と描画を兼ねてしまっているので、charmove()は移動だけにして、chardraw()で描画だけするようにすると分かりやすくなり、描画順番のミスも減るかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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