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

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 背景をバックにキャラを動かす。

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

#6

by Ouxiy » 4年前

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

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

#5

by みけCAT » 4年前

Ouxiy さんが書きました:
4年前
ちなみに、キャラはループに入れなくても描画できたのですが、なぜでしょうか。
キャラをループに入れなくても描画できるようなコードを書き、実行したからだと思います。
例えば、1.4章 画像をロードして表示するのコードでは、
ループを用いずにキャラを描画しています。

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

#4

by Ouxiy » 4年前

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

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

#3

by Ouxiy » 4年前

ありがとうございます!

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

#2

by みけCAT » 4年前

ループ中で背景しか描画していないから、背景しか映らないのですね。
背景とキャラの描画を同じループに入れましょう。

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

#1

by Ouxiy » 4年前

以下のプログラムにおいて背景をバックにキャラを移動させたいのですが、なぜか背景しか映りません。
キャラを背景の後に書いたはずなのですが、どうもうまくいきません。
環境は
  • 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;				// ソフトの終了 
}

ページトップ