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

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

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

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

DXライブラリ

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

Q&A

解決済

1回答

580閲覧

画像Bの座標を変化させる時に限り、常に表示させている画像Aを消したい。

A.owl

総合スコア5

C++

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

DXライブラリ

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

1グッド

0クリップ

投稿2020/02/15 07:59

編集2020/02/16 06:24

前提・実現したいこと

DXライブラリを用いてゲーム制作をしています。
実現したい内容は
1.常に画像Aを表示
2.特定のキーを入力した時のみ画像Aを非表示にして
画像Bを表示する。
といった内容になります。

質問は上記の内容を実現したいと言うことになりますが、
下記のコードで「なぜ」実現できなかったのかを、ご教授いただけると嬉しいです。

発生している問題・エラーメッセージ

キャラクターを移動させたいので、上記の内容のコードを4つ書いてみると 上方向と左方向への移動時には理想とする動作になっているのですが、 下方向と右方向への移動時に限り画像Aを非表示にする処理が実行されておらず、 画像Aと画像Bが重なって表示されてしまいます。

該当のソースコード

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { SetGraphMode(640, 480, 16); if (DxLib_Init() != 0) return 0; SetDrawScreen(DX_SCREEN_BACK); int x, y; int GameScreen; int GameFrame; int MenuSelectNum; int candy[4]; int chili[2]; int GraphOnOff; x = 320; y = 420; GraphOnOff = 1; GameFrame = LoadGraph("・・・.png"); GameScreen = LoadGraph("・・・.png"); chili[0] = LoadGraph("・・・.png"); chili[1] = LoadGraph("・・・.png"); candy[0] = LoadGraph("・・・.png"); candy[1] = LoadGraph("・・・.png"); candy[2] = LoadGraph("・・・.png"); candy[3] = LoadGraph("・・・.png"); MenuSelectNum = MenuSelect(); while (UpdateKey() == 0) { if (ClearDrawScreen() != 0) break; if (MenuSelectNum == 1) { DrawGraph(0, 0, GameFrame, TRUE); DrawGraph(140, 20, GameScreen, TRUE); DrawRotaGraph(320, 104, 1.0, 0, chili[0], TRUE); } if (MenuSelectNum == 2) break; if (GraphOnOff == 1) { DrawRotaGraph(x, y, 1.0, 0, candy[0], TRUE); } // 問題の移動処理 if (Key[KEY_INPUT_W] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[0], TRUE); y -= 3; } else { GraphOnOff = 1; }          //このSキーの処理と if (Key[KEY_INPUT_S] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[1], TRUE); y += 3; } else { GraphOnOff = 1; }          // Dキーの処理がうまくいきません。 if (Key[KEY_INPUT_D] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[2], TRUE); x += 3; } else { GraphOnOff = 1; } if (Key[KEY_INPUT_A] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[3], TRUE); x -= 3; } else { GraphOnOff = 1; } if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break; if (ProcessMessage() != 0) break; if (ScreenFlip() != 0) break; } DxLib_End(); return 0; }

試したこと

座標に対して加算している場合にうまくいかないのかと思い
減算してみたりしたが結果は変わりませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10
Microsoft Visual Studio Community 2019(Version 16.4.5)

初めて質問させていただきます、ソースコードを全て載せるべきか悩んだのですが
省略しています。
他にも質問に回答していただくにあたって必要な情報などが抜けていたら、
ご指摘いただけると嬉しいです。

yuki23👍を押しています

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

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

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

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

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

episteme

2020/02/15 09:39

DxLib はC++ではなかったか?
A.owl

2020/02/15 12:55

ご指摘ありがとうございます。 次回質問させていただく際にはタグにCは必要なく、C++とDXライブラリで良いという 解釈で合っていますでしょうか。
episteme

2020/02/15 21:49

> DXライブラリ・C言語を用いてゲーム制作をしています。 は正しくないのでは? と指摘しています。
A.owl

2020/02/16 06:27

すみません、見逃していました。 内容を編集させていただいたので、ぜひ確認していただけると嬉しいです。
guest

回答1

0

ベストアンサー

S, D キーの分岐で GraphOnOff = 0; にした後、A キーの分岐で GraphOnOff = 1; に戻してしまうからです。
条件と結果をごちゃまぜにせず整理しましょう。

投稿2020/02/15 08:56

yuki23

総合スコア1448

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

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

A.owl

2020/02/15 13:04 編集

回答ありがとうございました。 回答いただいた事全てを理解できているかは分かりませんが、最終的に if (Key[KEY_INPUT_W] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[0], TRUE); y -= 3; }else if (Key[KEY_INPUT_S] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[1], TRUE); y += 3; }else if (Key[KEY_INPUT_D] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[2], TRUE); x += 3; }else if (Key[KEY_INPUT_A] > 1) { GraphOnOff = 0; DrawRotaGraph(x, y, 1.0, 0, candy[3], TRUE); x -= 3; }else { GraphOnOff = 1; } こうする事で、理想の動作にすることが出来ました。 また質問させていただいた際にお世話になることもあるかも知れませんので、 その際には、どうぞよろしくお願いいたします。
episteme

2020/02/16 18:08

ただしそれだと複数のキー同時押しだとW優先になります。 それで構わんならいいけど
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問