背景をバックにキャラを動かす。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ouxiy
記事: 74
登録日時: 2週間前

背景をバックにキャラを動かす。

#1

投稿記事 by Ouxiy » 2週間前

以下のプログラムにおいて背景をバックにキャラを移動させたいのですが、なぜか背景しか映りません。
キャラを背景の後に書いたはずなのですが、どうもうまくいきません。
環境は
  • Windows10、DXライブラリ、visual studio 2019
 です。

コード:

#include "DxLib.h"


// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{




	ChangeWindowMode(true); // ウィンドウモードにする
	SetGraphMode(640, 480, 0); // ウィンドウの大きさを指定
	SetMainWindowText("背景と移動"); // ウィンドウのタイトルを指定
	SetOutApplicationLogValidFlag(FALSE); // ログの出力を無効化


	if (DxLib_Init() == -1)		// DXライブラリ初期化処理
	{


		ChangeWindowMode(TRUE);

		return -1;			// エラーが起きたら直ちに終了
	}
	int imgBack = LoadGraph("back.bmp");

	while (!ProcessMessage()) {
		// 画面をクリア
		ClearDrawScreen();

		// 背景の画像を描画
		DrawGraph(0, 0, imgBack, false);


		// 画面に出力
		ScreenFlip();
	}


	//キー取得用配列
	char key[256];

	//x座標
	int x = 0, y = 0;


	//グラフィックハンドル格納用配列
	int gh[12];


	//画像読み込み
	// プレイヤーの画像を読み込む
	int imgChara = LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
	while (!ProcessMessage()) {

		//ClearDrawScreen();

		// キャラの画像を描画
		DrawGraph(0, 0, imgChara, true);

		// 画面に出力
		ScreenFlip();
	}






	WaitKey();             // 結果を見るためにキー待ち(『WaitKey』を使用)

	//移動係数
	float move = 1.0f;

	//横方向と縦方向のカウント数。
	int xcount = 0, ycount = 0;
	//添字用変数
	int ix = 0, iy = 0, result = 0;

	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0) {

		if (key[KEY_INPUT_LEFT] == 1 || key[KEY_INPUT_RIGHT] == 1) {

			if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
				//移動係数を0.71に設定
				move = 0.71f;
			}
			else {
				//斜めじゃなければ1.0に設定
				move = 1.0f;
			}
		}
		else if (key[KEY_INPUT_UP] == 1 || key[KEY_INPUT_DOWN] == 1) {
			move = 1.0f;
		}


		if (key[KEY_INPUT_LEFT] == 1) {
			x -= (int)4 * move;
		}
		if (key[KEY_INPUT_RIGHT] == 1) {
			x += (int)4 * move;

		}
		if (key[KEY_INPUT_UP] == 1) {
			y -= (int)4 * move;

		}
		if (key[KEY_INPUT_DOWN] == 1) {
			y += (int)4 * move;

		}

		//左キーが押されてて、かつxcountが0以上なら0にしてから1引く。
		//それ以外は1引く
		if (key[KEY_INPUT_LEFT] == 1) {
			if (xcount > 0)
				xcount = 0;
			--xcount;

		}
		//右キーが押されてて、かつxcountが0以下なら0にしてから1足す。
		//それ以外は1引く
		if (key[KEY_INPUT_RIGHT] == 1) {
			if (xcount < 0)
				xcount = 0;
			++xcount;
		}
		//上キーが押されてて、かつycountが0以上なら0にしてから1引く。
		//それ以外は1引く
		if (key[KEY_INPUT_UP] == 1) {
			if (ycount > 0)
				ycount = 0;
			--ycount;
		}
		//下キーが押されてて、かつycountが0以下なら0にしてから1足す。
		//それ以外は1足す
		if (key[KEY_INPUT_DOWN] == 1) {
			if (ycount < 0)
				ycount = 0;
			++ycount;
		}


		//カウント数から添字を求める。
		ix = abs(xcount) % 30 / 10;
		iy = abs(ycount) % 30 / 10;

		//xカウントがプラスなら右向きなので2行目の先頭添字番号を足す。
		if (xcount > 0) {
			ix += 3;
			result = ix;
		}
		else if (xcount < 0) {
			//マイナスなら左向きなので、4行目の先頭添字番号を足す。
			ix += 9;
			result = ix;
		}

		//yカウントがプラスなら下向きなので、3行目の先頭添字番号を足す。
		if (ycount > 0) {
			iy += 6;
			result = iy;
		}
		else if (ycount < 0) {
			//1行目の先頭添字番号は0なので何もする必要なし。(分かりやすくするために書いときました)
			iy += 0;
			result = iy;
		}

		//斜め移動の場合は横顔を優先
		if (move == 0.71f)
			result = ix;


		//描画
		DrawGraph(x, y, gh[result], TRUE);


		//押されてなければカウントをゼロにする。
		if (key[KEY_INPUT_LEFT] != 1 && key[KEY_INPUT_RIGHT] != 1) {
			xcount = 0;
		}
		if (key[KEY_INPUT_UP] != 1 && key[KEY_INPUT_DOWN] != 1) {
			ycount = 0;
		}


		if (key[KEY_INPUT_ESCAPE] == 1) {

			break;


		}

	}



	DxLib_End();				// DXライブラリ使用の終了処理

	return 0;				// ソフトの終了 
}

アバター
みけCAT
記事: 6198
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 背景をバックにキャラを動かす。

#2

投稿記事 by みけCAT » 2週間前

ループ中で背景しか描画していないから、背景しか映らないのですね。
背景とキャラの描画を同じループに入れましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Ouxiy
記事: 74
登録日時: 2週間前

Re: 背景をバックにキャラを動かす。

#3

投稿記事 by Ouxiy » 2週間前

ありがとうございます!

Ouxiy
記事: 74
登録日時: 2週間前

Re: 背景をバックにキャラを動かす。

#4

投稿記事 by Ouxiy » 2週間前

みけCAT さんが書きました:
2週間前
ループ中で背景しか描画していないから、背景しか映らないのですね。
背景とキャラの描画を同じループに入れましょう。
ありがとうございます。ちなみに、キャラはループに入れなくても描画できたのですが、なぜでしょうか。

アバター
みけCAT
記事: 6198
登録日時: 8年前
住所: 千葉県
連絡を取る:

Re: 背景をバックにキャラを動かす。

#5

投稿記事 by みけCAT » 2週間前

Ouxiy さんが書きました:
2週間前
ちなみに、キャラはループに入れなくても描画できたのですが、なぜでしょうか。
キャラをループに入れなくても描画できるようなコードを書き、実行したからだと思います。
例えば、1.4章 画像をロードして表示するのコードでは、
ループを用いずにキャラを描画しています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Ouxiy
記事: 74
登録日時: 2週間前

Re: 背景をバックにキャラを動かす。

#6

投稿記事 by Ouxiy » 2週間前

どうもありがとうございます!

返信

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