前提・実現したいこと
2Dアクションゲームのプログラムを作成しています。
発生している問題・エラーメッセージ
キャラクターのアニメーションを描画する際にたまに一瞬表示されない時があり、何が原因なのかがわかりません。
エラーメッセージは「WaitTimer」があいまいです。」と表示されます。
### 該当のソースコード #include "DxLib.h" const int WIN_WIDTH = 600; //ウィンドウ横幅 const int WIN_HEIGHT = 400;//ウィンドウ縦幅 const int PLAYER_WIDTH = 64; const int PLAYER_HEIGHT = 64; int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow) { ChangeWindowMode(TRUE); //ウィンドウモードに設定 //ウィンドウサイズを手動では変更できず、かつウィンドウサイズに合わせて拡大できないようにする SetWindowSizeChangeEnableFlag(FALSE, FALSE); SetMainWindowText(TITLE); // タイトルを変更 SetGraphMode(WIN_WIDTH, WIN_HEIGHT, 32); //画面サイズの最大サイズ、カラービット数を設定(モニターの解像度に合わせる) SetWindowSizeExtendRate(1.0); //画面サイズを設定(解像度との比率で設定) SetBackgroundColor(0x00, 0x00, 0xFF); // 画面の背景色を設定する //Dxライブラリの初期化 if (DxLib_Init() == -1) { return -1; } //(ダブルバッファ)描画先グラフィック領域は裏面を指定 SetDrawScreen(DX_SCREEN_BACK); //画像などのリソースデータの変数宣言と読み込み //----------画像読み込み-------- int playerTexture_Left[4]; LoadDivGraph("player_taiki_left.png", 4, 4, 1, PLAYER_WIDTH, PLAYER_HEIGHT, playerTexture_Left); int playerTexture_Right[4]; LoadDivGraph("player_taiki_right.png", 4, 4, 1, PLAYER_WIDTH, PLAYER_HEIGHT, playerTexture_Right); int playerTexture_Run_Left[6]; LoadDivGraph("player_run_left.png", 6, 6, 1, PLAYER_WIDTH, PLAYER_HEIGHT, playerTexture_Run_Left); int playerTexture_Run_Right[6]; LoadDivGraph("player_run_right.png", 6, 6, 1, PLAYER_WIDTH, PLAYER_HEIGHT, playerTexture_Run_Right); //ゲームループで使う変数の宣言 char keys[256] = { 0 }; //最新のキーボード情報用 char oldkeys[256] = { 0 };//1ループ(フレーム)前のキーボード情報 int playerFlame = 0; int playerDrawCount = 0; int playerDirection = 0; float playerX = 100; float playerY = 100; float playerFallSpeed = 0.2f; //落下速度 float playerFallGravity = 0.0f; //重力加速度 // ゲームループ while (1) { //最新のキーボード情報だったものは1フレーム前のキーボード情報として保存 //最新のキーボード情報を取得 GetHitKeyStateAll(keys); //画面クリア ClearDrawScreen(); //--------- ここからプログラムを記述 ----------// //更新処理 if (keys[KEY_INPUT_LEFT]) { playerDirection = 1; playerX -= 5.0f; } if (keys[KEY_INPUT_RIGHT]) { playerDirection = 0; playerX += 5.0f; } if (keys[KEY_INPUT_UP]) { playerFallGravity = -3.0f; } playerY += playerFallGravity; playerFallGravity += playerFallSpeed; if (playerFallGravity > 30) playerFallGravity = 30; if (playerY > 200) { playerFallGravity = 0; } //描画処理 if (playerDirection == 0 && keys[KEY_INPUT_RIGHT] == 0) { playerDrawCount++; if (20 < playerDrawCount) { playerFlame++; playerDrawCount = 0; } if (playerFlame == 4) { playerFlame = 0; } DrawGraph(playerX, playerY, playerTexture_Right[playerFlame], TRUE); } if (playerDirection == 1 && keys[KEY_INPUT_LEFT] == 0) { playerDrawCount++; if (20 < playerDrawCount) { playerFlame++; playerDrawCount = 0; } if (playerFlame == 4) { playerFlame = 0; } DrawGraph(playerX, playerY, playerTexture_Left[playerFlame], TRUE); } if(keys[KEY_INPUT_LEFT]) { playerDrawCount++; if (15 < playerDrawCount) { playerFlame++; playerDrawCount = 0; } if (playerFlame == 6) { playerFlame = 0; } DrawGraph(playerX, playerY, playerTexture_Run_Left[playerFlame], TRUE); } if (keys[KEY_INPUT_RIGHT]) { playerDrawCount++; if (15 < playerDrawCount) { playerFlame++; playerDrawCount = 0; } if (playerFlame == 6) { playerFlame = 0; } DrawGraph(playerX, playerY, playerTexture_Run_Right[playerFlame], TRUE); } //--------- ここまでにプログラムを記述 ---------// ScreenFlip();//(ダブルバッファ)裏面 // 20ミリ秒待機(疑似60FPS) WaitTimer(20); // Windows システムからくる情報を処理する if (ProcessMessage() == -1) { break; } // ESCキーが押されたらループから抜ける if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) { break; } } //Dxライブラリ終了処理 DxLib_End(); return 0; } ```C言語 DXライブラリ ソースコード
試したこと
playerDrawCountのところをいじってみたのですがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
VisualStudio2019を使用しています。
あなたの回答
tips
プレビュー