現在、RPGに近い移動方式のアクション(見下ろし視点時代のゼルダに近いものです、具体的には4つの剣のようなものです)を作ろうとしているのですが、1マス移動させるという行程が上手くできません。
現在は新・ゲームプログラミングの館を参考に以下のようなコードを書いているのですが、下と右しか動きません。上や左を入力しても無反応です。
また、画像を分割して表示することは出来たのですが、それを切り替えながら表示する(歩いているように見せる)ことが出来ません。
どうすればマス移動させることが出来るでしょうか?
また、マスを最初に設定する?やり方があるそうですが、その方がいいのでしょうか?
#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;
}
int x = 320, y = 240;
int Handle;
void gpCalc() {
if (Key[KEY_INPUT_RIGHT] >= 1) { // 右キーが押されていたら
x++; // 右へ移動
}
else if (x % 32 != 0 && x % 32 > 0) {
x++;
}
if (Key[KEY_INPUT_DOWN] >= 1) { // 下キーが押されていたら
y++; // 下へ移動
}
else if (y % 32 != 0 && y % 32 > 0) {
y++;
}
if (Key[KEY_INPUT_LEFT] >= 1) { // 左キーが押されていたら
x--; // 左へ移動
}
else if (x % 32 != 0 && x % 32 < 0) {
x--;
}
if (Key[KEY_INPUT_UP] >= 1) { // 上キーが押されていたら
y--; // 上へ移動
}
else if (y % 32 != 0 && y % 32 < 0) {
y--;
}
}
void gpDraw() {
DrawRotaGraph(x, y, 1.0, 0.0, Handle, TRUE);
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
int Image[16];//16個の画像を格納する配列
LoadDivGraph("画像/キャラクタ10.png", 16, 4, 4, 32, 32, Image);//画像を16個に分割してImage配列に保存
int Green = GetColor(0, 255, 0);
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) {
DrawGraph(0, 0, Image[0], TRUE);
DrawGraph(0, 100, Image[10], TRUE);
//座標表示装置
DrawFormatString(0, 0, Green, "座標[%d,%d]", x, y); // 文字を描画する
gpCalc();
gpDraw();
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}