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

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

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

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

C++

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

DXライブラリ

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

Q&A

1回答

1854閲覧

if (enemystayhere > 0 && enemystayhere < 500)でのcharall.pngの描画が出来ません。

R-ogiura

総合スコア60

C

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

C++

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

DXライブラリ

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

0グッド

0クリップ

投稿2020/01/18 07:39

編集2020/01/18 08:32

環境

  • Windows10
  • 敵の画像はこちらのサイトのものを使わせて頂きました。
  • 画像

以下のようにバトルに関するヘッダファイルの部分に以下のものを加えました。

//敵を描画 if (enemystayhere == 0) { DrawExtendGraph(pos[enemyY][enemyX][0] - 14, pos[enemyY][enemyX][1] - 66, pos[enemyY][enemyX][0] + 64, pos[enemyY][enemyX][1] + 66, enemyImage, TRUE); } if (stayhere == 1) { ++enemystayhere; } if (enemystayhere > 0 && enemystayhere < 500) {charall.png DrawExtendGraph(pos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66, enemyImage, TRUE); } if (enemystayhere > 500) { enemystayhere = 0; stayhere = 0; enemymovelock = 0; }

しかし、if (enemystayhere > 0 && enemystayhere < 500)での描画が出来ません。何時間も考えましたがわからないままです。
どうか解決のために知力を貸してください。

こちらはバトルに関する新しいヘッダファイルです。
//pastebin.com/TrFkBqdu
新しいメインプログラムです。
//pastebin.com/z0VEhu7a
新しい変数のヘッダファイルです。
//pastebin.com/zKxRaZQc

その他のヘッダファイルはいじっていません。
key.h
talk.h
タイトル.h
コンティニュー.h

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

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

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

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

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

shiracamus

2020/01/18 07:49 編集

ヘッダファイルに変数本体や関数本体を書くのをやめましょう。 今後もデバッグで悩まされることになりますよ。 その if文の条件は成立しているのですか? if文の中にprintfでデバッグ情報を出力したりデバッガで止めたりして確認しましたか? if文がおかしいのか、描画関数を呼んでいるのに描画されないのか切り分けましょう。
R-ogiura

2020/01/18 08:05

はい、関数DrawFormatStringを使いif文の条件に必要な変数の中身は確認してちゃんと条件を満たしていることは確認できました。 わかりました。ヘッダファイルを書く直します。(ちなみに、ヘッダファイルに変数と関数を書いては行けない理由を教えてくださるとありがたいです。)
R-ogiura

2020/01/18 08:21

あの、変数を定義していたヘッダファイルと他のヘッダファイルの関数と変数をメインプログラムにまとめて以下のようにしました。 https://pastebin.com/RVJMu55C しかし、なぜか変数が定義されていないとエラーメッセージが大量に出たのですが、なぜですか? 以下のようなエラーが出ました。 https://pastebin.com/H2dF9sCR グローバル変数宣言として定義されると思うのですが。
shiracamus

2020/01/18 08:25

変数や関数のプロトタイプを書いたヘッダファイルが必要です。 変数代入を取り除いた変数名一覧と、関数本体を取り除いた関数定義一覧をヘッダファイルに書きましょう。 /usr/include/ の下にあるヘッダファイルにどんなことが書いてあるか見てみるといいですよ。
episteme

2020/01/18 08:51

> ...\talk.h(53,44): error C2065: 'Key': 定義されていない識別子です。 tals.h 内に Key を必要とする行があるにもかかわらず、それが見つからないから。
R-ogiura

2020/01/18 11:36

epistemeさんの方では、以前の質問でのプログラムで敵はバトル開始の前からちゃんと描画されているのを確認して頂けたでしょうか?
episteme

2020/01/18 11:49 編集

やってませんよ。そんな義務ないし頼まれてすらいない。
R-ogiura

2020/01/18 12:03

え、何も動かしていないのに解答していたんですか? 確かに義理はないですが、それでは当てずっぽうじゃないですか。 あの、そういうなんの根拠もなしに解答するのは真面目にやめてください。(そういう人をブロックできる機能があれば良いのですが。) てっきり動かして確認されたともっていたので、あなたの解答を真に受けて時間を無駄にしました。 (※今度そのような根拠もない無責任な発言で学習を妨げるようならば通報しますのでご了承ください。) それ以前にどんなコードにしても何もコンパイルやビルドしないで発言するのはプログラマとしてどうかとも思ってしまいます。
episteme

2020/01/18 12:49

聞いたかいみんな。 動かしてもいないなら回答するなとさ。
R-ogiura

2020/01/18 13:28

普通は動かしてから回答すると思うのですが、、、epistemeさんは私同様にプログラミングを始めて間もないのかもしれないですね。プログラミングを始めるのに年齢なんて関係ないですよ!お互い頑張りましょう!
Zuishin

2020/01/18 15:04

動くんですかこれ?
Zuishin

2020/01/18 15:05

動かなかったら誰も答えられないことになりますが。
R-ogiura

2020/01/18 15:29

はい、とりあえず動きます。 しかし、 player.hに書いてある // 俺キャラ(敵の目の前に移動する際の残像)の描画 if (stayhere == 1) { ++enemystayhere; } if (enemystayhere > 0 && enemystayhere < 150) { DrawExtendGraph(pos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66, enemyImage, TRUE); } if (enemystayhere > 150) { enemystayhere = 0; stayhere = 0; enemymovelock = 0; } が正しく働かない。かつ、主人公が敵に攻撃されると消えるバグはあります。(まだ解決していません)
Zuishin

2020/01/18 15:33

それを動かないと言います。
R-ogiura

2020/01/18 15:57

なるほど。ですが、せめてビルドして問題点だけでも見て頂きたかったです。 まあ、あくまでボランティアなのでわがままは言えませんが。
episteme

2020/01/19 03:56

ビルドするまでもなく問題点の(少なくともひとつ)は明らか。 「ヘッダ内に定義があってはならない。」
kyoya0819

2020/01/19 14:08

> ※今度そのような根拠もない無責任な発言で学習を妨げるようならば通報しますのでご了承ください。 あんたが言うか
makosankibu

2020/01/21 02:02

回答する際にわざわざ質問者の環境を再現してビルドまでする人は、ごく一部の人しかいないと思いますよ。 再現できる情報を質問者が全て開示してくるとも限らないですし、そもそも「出来ません」だけの質問が良くないと思います。
guest

回答1

0

どういう処理ルートを通っているか、デバッグ文を入れて確認してみましょう。
pos[1][4] にしか描画しないのは正しいのですか?

c

1printf("enemystayhere#1: %d\n", enemystayhere); 2if (enemystayhere == 0) { 3 printf("DrawExtendGraph#1\n"); 4 DrawExtendGraph(pos[enemyY][enemyX][0] - 14, pos[enemyY][enemyX][1] - 66, pos[enemyY][enemyX][0] + 64, pos[enemyY][enemyX][1] + 66, enemyImage, TRUE); 5} 6 7printf("stayhere: %d\n", stayhere); 8if (stayhere == 1) { 9 ++enemystayhere; 10} 11printf("enemystayhere#2: %d\n", enemystayhere); 12if (enemystayhere > 0 && enemystayhere < 500) {charall.png 13 printf("DrawExtendGraph#2\n"); 14 DrawExtendGraph(pos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66, enemyImage, TRUE); 15 16} 17if (enemystayhere > 500) { 18 enemystayhere = 0; 19 stayhere = 0; 20 enemymovelock = 0; 21}

投稿2020/01/18 07:59

編集2020/01/18 08:00
shiracamus

総合スコア5406

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

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

R-ogiura

2020/01/18 08:06

if (enemystayhere > 0 && enemystayhere < 500)の条件の間だけ、描画関数DrawExtendGraphよりpos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66の固定された座標に画像を描画したいので大丈夫です。
shiracamus

2020/01/18 08:14

それで、if文に入ってきて DrawExtendGraph関数を呼び出していることは確認しましたか? enemystayhere変数がずっと0のままで、if文の中に入ってきてないのではありませんか?
R-ogiura

2020/01/18 08:33

いえ、enemystayhereはちゃんとSeenが2の時に繰り上がっています。
shiracamus

2020/01/18 08:54

printf("pos: %d %d %d %d\n", pos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66); を入れてみて、座標値に問題はありませんか?
R-ogiura

2020/01/18 12:10

確認しました。 座標は1180、290、1258、422と出ました。 実際に画像は描画されていませんが、座標が描画されていないだけで画像が描画されるべき場所して正しい座標であると確認できました。 ちなみに、shiracamusさんの方でも同じように画像は描画されないでしょうか。 お手数をお掛けしてしまいますが、確認できるならばどうか確認して頂きたいです。(単純に私の技量不足ですが)私のPCは最近調子が悪く、もしかしたらそれが原因かもとも考えています。 どうかよろしくお願いいたします。
shiracamus

2020/01/18 12:20

随分大きな座標ですが、画面の外ではないんですかね? PCのディスプレイの解像度が下がってて表示できてないということもありませんか? ソースが散らばってて、動かして確認してみる気になりません。 1ファイルだけとか、GitHubからcloneするだけで済むなら動かす気にもなりますが。 いまは出先でスマホから回答してますし。 どこまで状態確認したのか書かれていないので、ひとつひとつ確認させていただいてる状況です。
R-ogiura

2020/01/19 00:12

おはようございます。私の方では、player.hに加えた if (stayhere == 1) { ++enemystayhere; } if (enemystayhere > 0 && enemystayhere < 50) { DrawExtendGraph(pos[1][4][0] - 14, pos[1][4][1] - 66, pos[1][4][0] + 64, pos[1][4][1] + 66, enemyImage, TRUE); } if (enemystayhere > 50) { enemystayhere = 0; stayhere = 0; enemymovelock = 0; } が正しく機能しないことと 敵が突進してきた後で主人公が自分の陣地の左真ん中上に移動すると消えたり突進してきた敵と移動するバグが見られました。 これ以外には問題はないです。
shiracamus

2020/01/19 01:02 編集

最初に書きましたが、問題個所の絞り込みを行いましょう。 ・描画関数を呼んでいるのか呼んでいないのか ⇒ if文の中にはいったかどうか ・関数名が正しいかどうか ・描画パラメータが正しいのか正しくないのか ⇒ 画面の外側じゃないか ・イメージデータが正しいか ⇒ 処理を全部コメントアウトして直接座標指定で描画だけしてみる
shiracamus

2020/01/19 01:11

ダウンロードして動かしてみようと思いましたが、手間がかかって仕方がないです。 全部のファイルを簡単にダウンロードするスクリプトを用意できたりしませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問