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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

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

Q&A

解決済

1回答

7949閲覧

1フレームに1度だけ動作させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

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

0グッド

0クリップ

投稿2017/08/17 14:01

###前提・実現したいこと
1フレームに1度だけ動作させたいです。
エンターキーを押したらiを1増やして文字列を表示させたかったのですが、高速でiが増えてしまい、文字列が瞬時に変わってしまいます。

###該当のソースコード

C++

1#include "DxLib.h" 2 3int Red,Black,White,i=0; 4int m_hp, e_hp; 5int backHandle,mHandle; 6char* str[] = 7{ 8 "あいうえお", 9 "かきくけこ", 10 "さしすせそ" 11}; 12int flg=0; 13 14int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 15{ 16 ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK); 17 18 Red = GetColor(255, 0, 0); 19 Black = GetColor(0, 0, 0); 20 White = GetColor(255, 255, 255); 21 22 m_hp = 10; 23 e_hp = 10; 24 backHandle = LoadGraph("/Users/user/Pictures/bg.jpg"); 25 mHandle = LoadGraph("/Users/user/Pictures/player.png"); 26 27 28 while(ProcessMessage() == 0) 29 { 30 ClearDrawScreen(); 31 32 DrawGraph(0, 0, backHandle, TRUE); 33 DrawRotaGraph(120,350,0.8,0, mHandle, TRUE); 34 DrawBox(230, 300, 620, 470, Black, TRUE); 35 36 if (CheckHitKey(KEY_INPUT_RETURN)==1&&i < 3) 37 { 38 i++; 39 } 40 else if(i>=3){ 41 flg = 1; 42 } 43 44 DrawFormatString(240, 300, White, "%s", str[i]); 45 46 ScreenFlip(); 47 48 } 49 50 DxLib_End(); 51 return 0; 52}

初歩的なことですいませんが、よろしくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2017 Community
DXライブラリ
Visual C++

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

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

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

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

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

guest

回答1

0

ベストアンサー

追加部分は以下のサイトのコピペですが
3.3章 簡単な選択画面を作る

1フレームに1回ではなく、キーを長押ししても入力は最初の1回のみと言う処理です

cpp

1#include "DxLib.h" 2 3int Key[256]; // キーが押されているフレーム数を格納する 4 5// キーの入力状態を更新する 6int gpUpdateKey() { 7 char tmpKey[256]; // 現在のキーの入力状態を格納する 8 GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る 9 for (int i = 0; i<256; i++) { 10 if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら 11 Key[i]++; // 加算 12 } 13 else { // 押されていなければ 14 Key[i] = 0; // 0にする 15 } 16 } 17 return 0; 18} 19 20int Red, Black, White, i = 0; 21int m_hp, e_hp; 22int backHandle, mHandle; 23char* str[] = 24{ 25 "あいうえお", 26 "かきくけこ", 27 "さしすせそ" 28}; 29int flg = 0; 30 31int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 32{ 33 ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); 34 35 Red = GetColor(255, 0, 0); 36 Black = GetColor(0, 0, 0); 37 White = GetColor(255, 255, 255); 38 39 m_hp = 10; 40 e_hp = 10; 41 backHandle = LoadGraph("/Users/user/Pictures/bg.jpg"); 42 mHandle = LoadGraph("/Users/user/Pictures/player.png"); 43 44 while (ScreenFlip() == 0 && ProcessMessage() == 0 && gpUpdateKey() == 0) 45 { 46 ClearDrawScreen(); 47 48 DrawGraph(0, 0, backHandle, TRUE); 49 DrawRotaGraph(120, 350, 0.8, 0, mHandle, TRUE); 50 DrawBox(230, 300, 620, 470, Black, TRUE); 51 52 if (Key[KEY_INPUT_RETURN] == 1) { // リターンキーが押された瞬間だけ処理 53 54 i = (i + 1) % 3; // 文字列をループ表示させる 55 56 if (i >= 3) flg = 1; 57 } 58 59 DrawFormatString(240, 300, White, "%s", str[i]); 60 61 } 62 63 DxLib_End(); 64 return 0; 65}

投稿2017/08/17 15:57

編集2017/08/17 16:01
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問