if文でelseで一瞬だけ横に向くように作るもなかなかうまくいかず。
全体のコードの一部分ですが
// カーソルキーの右が押されている
if (Key[KEY_INPUT_RIGHT] == 1)
if (idou[ny + 0][nx + 1] == 0) { //移動しようとする先が空いていれば
//移動可能
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; // ソフトの終了
}