トップページ > 記事閲覧
checkhitkeyが入力してない時も動いてます。※プログラミング初心者です
名前:11 日時: 2024/08/24 23:26

dxlibでシューティングゲームを作っている途中、プレイヤーが動かす機体の移動部分を作っていたらcheckhitkey(左)が入力をしていないのに動いています。 入力している時だけ動くようにするにはどうすればよいのでしょうか?どなたか教えていただけると幸いです。 ↓問題のプログラムです。case PLAYの少し下にcheckhitkey(左)はあります #include"DxLib.h" //定数 const int WIDTH = 1900; //画面の幅 const int HEIGHT = 1120; //画面の高さ const int cannonstartx1 = 750; //大砲の初期のx1座標 const int cannonstarty1 = 920; //大砲の初期のy1座標 const int cannonstartx2 = 950; //大砲の初期のx2座標 const int cannonstarty2 = 1120; //大砲の初期のy2座標 const int speed = 10; const int cannonwidth = 200; double frameCount = 0; int lastTime, currentTime; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //----------------------------------// //基本設定 //----------------------------------// ChangeWindowMode(TRUE); //ウィンドウモードにする DxLib_Init(); //ライブラリを初期化 Initialise SetMainWindowText("花火シューティング"); SetDrawScreen(DX_SCREEN_BACK); //背景をセットする SetGraphMode(WIDTH, HEIGHT, 32); //ウィンドウのサイズとカラーモードを決める //ライブラリ初期化でエラー起きたら終了 if (DxLib_Init() == -1) { return -1; } //ゲームの進行に関する変数 enum { TITLE, PLAY, OVER }; //シーンのセレクトナンバー int selectScene = TITLE; //タイマー int timer = 0; //変数 int cannonx2 = cannonstartx2; int cannony2 = cannonstarty2; int cannonx1 = cannonstartx1; int cannony1 = cannonstarty1; int cannon; int night; //ゲームフレームカウント currentTime = lastTime - GetNowCount(); while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) { currentTime = GetNowCount(); //ゲームフレームカウント double deltaTime = (currentTime - lastTime) / 1000.0; frameCount += deltaTime; ClearDrawScreen(); timer++; switch (selectScene) { case TITLE: //背景画像を描画 int startScreenImage; startScreenImage = LoadGraph("img/hanabi_sky.png"); DrawExtendGraph(0, 0, WIDTH, HEIGHT, startScreenImage, TRUE); //タイトル画面を表示 SetFontSize(100); DrawString(WIDTH / 2 - 150 / 2 * 12 / 2, HEIGHT / 3, "花火シューティング", GetColor(255, 69, 0)); //スタートボタンを点滅させる if (timer % 60 < 30) { SetFontSize(50); DrawString(WIDTH / 2 - 50 / 2 * 21 / 2, HEIGHT * 2 / 3, "Press SPACE to start.", GetColor(238, 130, 238)); } //スペースキーを押してゲームスタート if (CheckHitKey(KEY_INPUT_SPACE) == 1) { selectScene = PLAY; } break; case PLAY: //背景画像を描画 night = LoadGraph("img/yozora.png"); DrawExtendGraph(0, 0, WIDTH, HEIGHT, night, TRUE); //大砲を描画 cannon = LoadGraph("img/taihou.png"); DrawExtendGraph(cannonx1, cannony1, cannonx2, cannony2, cannon, TRUE); //大砲を移動 if (CheckHitKey(KEY_INPUT_RIGHT) == 1) { cannonx1 = cannonx1 + speed; cannonx2 = cannonx2 + speed; if (cannonx2 > WIDTH) { cannonx2 = WIDTH; cannonx1 = WIDTH - cannonwidth; } } if (CheckHitKey(KEY_INPUT_LEFT) == 1); { cannonx1 = cannonx1 - speed; cannonx2 = cannonx2 - speed; if (cannonx1 < 0) { cannonx1 = 0; cannonx2 = cannonwidth; } } break; case OVER: SetFontSize(90); DrawString(WIDTH / 4, HEIGHT / 3, "GAME OVER", GetColor(255, 0, 0)); if (timer > 60 * 5) { selectScene = TITLE; break; } break; } ScreenFlip(); lastTime = currentTime; } //DXライブラリ使用の終了 DxLib_End(); return 0;
メンテ

Page: 1 |

Re: checkhitkeyが入力してない時も動いてます。※プログラミング初心者です ( No.1 )
名前:管理人 日時:2024/08/25 02:31

if (CheckHitKey(KEY_INPUT_LEFT) == 1); ↑ こちらですが、if() の後ろに不要な ; があるのが原因です こちらの ; を削除すると勝手に動くことはなくなると思います
メンテ
Re: checkhitkeyが入力してない時も動いてます。※プログラミング初心者です ( No.2 )
名前:11 日時:2024/08/25 08:11

ありがとうございました。全然気づきませんでした
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存