最初に描画された画像から一瞬横に向くようにしたいです。

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

最初に描画された画像から一瞬横に向くようにしたいです。

#1

投稿記事 by Ouxiy » 2ヶ月前

以下のプログラムを移動した後で、一瞬横に向くようにしたいのですが、
if文でelseで一瞬だけ横に向くように作るもなかなかうまくいかず。
全体のコードの一部分ですが

コード:

// カーソルキーの右が押されている
		if (Key[KEY_INPUT_RIGHT] == 1)
			if (idou[ny + 0][nx + 1] == 0) { //移動しようとする先が空いていれば
			//移動可能
				nx = nx + 1; //移動
				playerphoto = gh[5];
			}
nx = nx + 1; //移動で移動した後playerphoto = gh[5];で横を向くようにしたのですが、うまく働かずです。
もはや何のためにこいつがあるのかわからない状態です。
以下は全体のコードです。

コード:

#include "DxLib.h"



int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey() {
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
	for (int i = 0; i < 256; i++) {
		if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
			Key[i]++;     // 加算
		}
		else {              // 押されていなければ
			Key[i] = 0;   // 0にする
		}
	}
	return 0;
}

// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	SetGraphMode(1600, 680, 32); // ウィンドウの大きさを指定
	ChangeWindowMode(TRUE);



	if (DxLib_Init() == -1)        // DXライブラリ初期化処理
	{
		return -1;            // エラーが起きたら直ちに終了
	}



	//1. 3x3マスの2次元配列
	int idou[5][5] = {
	{1,1,1,1,1 },
	{1,0,0,0,1 },
	{1,0,0,0,1 },
	{1,0,0,0,1 },
	{1,1,1,1,1 },
	};


	//グラフィックハンドル格納用配列
	int gh[12];
	LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);//画像読み込み

	//int playerphoto = gh[7];//ループに入れてしまうと移動した際もずっとそこにあるんでダメ
	int nx = 2, ny = 2; // 最初のキャラのX座をdxとY座標をdyである。配列の真ん中の0を最初の座標としたため(2,2)となる



	SetDrawScreen(DX_SCREEN_BACK);
	while (ProcessMessage() == 0 && gpUpdateKey() == 0) {
		int playerphoto = gh[8];//ループに入れてしまうと移動した際もずっとそこにあるんでダメ。
		DrawGraph(50 * nx, 50 * ny, playerphoto, FALSE);//一瞬ではなくずっとあるようにするためにループに書いた。

		// カーソルキーの右が押されている
		if (Key[KEY_INPUT_RIGHT] == 1)
			if (idou[ny + 0][nx + 1] == 0) { //移動しようとする先が空いていれば
			//移動可能
				nx = nx + 1; //移動
				playerphoto = gh[5];
			}

		if (Key[KEY_INPUT_LEFT] == 1)
			if (idou[ny + 0][nx - 1] == 0) { //移動しようとする先が空いていれば
			//移動可能
				nx = nx - 1; //移動
				playerphoto = gh[5];
			}

		if (Key[KEY_INPUT_UP] == 1)
			if (idou[ny - 1][nx + 0] == 0) { //移動しようとする先が空いていれば
			//移動可能
				ny = ny - 1; //移動
				playerphoto = gh[5];
			}
		if (Key[KEY_INPUT_DOWN] == 1)
			if (idou[ny + 1][nx + 0] == 0) { //移動しようとする先が空いていれば
			//移動可能
				ny = ny + 1; //移動
				playerphoto = gh[5];
			}

		if (nx == 0 && ny == 0)
		{

			playerphoto = gh[5];
		}

		ScreenFlip();
		// 画面をクリア
		ClearDrawScreen();

		DrawGraph(50 * nx, 50 * ny, playerphoto, FALSE);

	}
	


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

	return 0;                // ソフトの終了 

}

アバター
usao
記事: 1565
登録日時: 6年前

Re: 最初に描画された画像から一瞬横に向くようにしたいです。

#2

投稿記事 by usao » 2ヶ月前

あなたが求める「一瞬」の期間だけplayerphotoの値をそのままにし,
その期間が過ぎた時点で別の値に戻せば良いのではないでしょうか.

とりあえずplayerphotoの値をwhileループ内の先頭で毎回初期化している時点で
視認できるほど長い期間だけ値を保持できているとは思えないので,
何か時間を計測する手段を用いる等して実現する処理を追加することになると思います.

Ouxiy
記事: 165
登録日時: 3ヶ月前

Re: 最初に描画された画像から一瞬横に向くようにしたいです。

#3

投稿記事 by Ouxiy » 2ヶ月前

ありがとうございます。
是非使わせて頂きます。

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

Re: 最初に描画された画像から一瞬横に向くようにしたいです。

#4

投稿記事 by みけCAT » 2ヶ月前

usao さんが書きました:
2ヶ月前
とりあえずplayerphotoの値をwhileループ内の先頭で毎回初期化している時点で
視認できるほど長い期間だけ値を保持できているとは思えないので,
「視認できるほど」どころか、書き換えたplayerphotoで描画した後、
それを画面の表示に反映する前に初期化したplayerphotoで上から描画してしまうので、
全く表示されないと予想できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

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