質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

0回答

1448閲覧

アニメーションの描画が一瞬表示されない

Asull

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

1クリップ

投稿2020/08/11 05:06

前提・実現したいこと

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を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問