また行き詰まってしまいました。DXライブラリです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Xoke

また行き詰まってしまいました。DXライブラリです。

#1

投稿記事 by Xoke » 13年前

こんにちは。
前回はありがとうございました。
またつまづいてしまったのでよろしければソースを見ていただいて、
その原因を教えていただきたいです。
以下のURLです。PWは「4110」です。
http://www1.axfc.net/uploader/so/2835132.zip

一応実行はできるのですがしばらくするとクリックしても応答しないようになってしまいます。
この原因を教えていただきたいです。
よろしくお願いいたします。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#2

投稿記事 by beatle » 13年前

原因の究明を丸投げし過ぎている気がするので、もう少しご自分で頑張ってみて下さい。
Visual Studioをお使いなら、応答なしになったときにどのあたりを実行しているのか、などは分かるのではないでしょうか。
あとは、タスクマネージャでメモリ使用量を確認してメモリリークしてるかどうかを確認するとか。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#3

投稿記事 by Xoke » 13年前

確かにそうですね、言葉が足りなくて申し訳ありません。

いろいろやってみたところ
最初1 Title画面表示
       ↓
   2 Menu画面表示
       ↓
   3 Stage画面表示
       ↓
   4 End(×)ボタンを押して2まで戻る
ここらへんで止まるのでそこらへんの関数を昨日一日チェックしてみたのですが、
原因がわからなかったのでどなたかに教えていただきたくトピックを立てさせていただきました。
ここら辺で呼び出してる関数は
 Stage_Draw,Menu_Draw,Stage_Initialize,Stage_Click,Menu_Click
等です。
改めてよろしくお願いしたいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#4

投稿記事 by softya(ソフト屋) » 13年前

デバッガは使われていますか?
ブレークポイントで停止させて、F10でステップ実行する事で何処でループしているか確認することができます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#5

投稿記事 by Xoke » 13年前

以前見て下さった方でしょうか?
その節はありがとうございました。

デバッガですが一応以前使おうとしてみたのですが、
クリックされたらというのをどのように認識させたらいいのかわからなくてその時から使っていません。
クリックされてFaseの値が変わるというのをどのように認識させたらいいのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#6

投稿記事 by softya(ソフト屋) » 13年前

Xoke さんが書きました:以前見て下さった方でしょうか?
その節はありがとうございました。

デバッガですが一応以前使おうとしてみたのですが、
クリックされたらというのをどのように認識させたらいいのかわからなくてその時から使っていません。
クリックされてFaseの値が変わるというのをどのように認識させたらいいのですか?
ブレークポイントの使い方はわかりますか?
クリックされた時の処理にブレークポイントを設定すればそこから追いかけられるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#7

投稿記事 by Xoke » 13年前

ブレークポイントの使い方ですが、
今ちょっと使ってみたところ大体わかってきました。
便利ですねこれ。

そこで今いろいろ試していたところ
唐突に「利用可能なソースはありません」というような表示がでてきたのですが、
これはどういったときに出るものでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#8

投稿記事 by softya(ソフト屋) » 13年前

F11とかでステップインしているとソースコードがないプログラムまで入り込んで「利用可能なソースはありません」と表示される事があると思いますが違いますでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#9

投稿記事 by Xoke » 13年前

F11は今は押してないと思います。
どうやら「すべて中断」というのを行ったときになっていたようです。
これはそういうものなのでしょうか?

その後いろいろ見てみたところ、
最初1 Title画面表示
       ↓
   2 Menu画面表示
       ↓
   3 Stage画面表示
       ↓
   4 End(×)ボタンを押して2まで戻る
のあと、
   2 Menu画面表示
       ↓
   3 Stage画面表示
またここへの過程でFaseは3のままなのにStage_Drawがうまく行われていませんでした。
この原因をいろいろ探して見たのですがよくわかりません。
教えていただけないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#10

投稿記事 by softya(ソフト屋) » 13年前

ここも頭の使いドコロです。

コード:

case 3:{
				Stage_Draw(StageNum);
1)のcase 3:はちゃんと判定してStage_Draw(StageNum);の行に来てますか?ブレークポイントで止まりますか?
2)Stage_Draw内にブレークポイントを貼ったら、ちゃんとブレークポイントで止まりますか?
3)そして、StageNumの値は合っていますか?

を確認しないと確認したことには成らないですね。
テストの仕方に頭を振り絞ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#11

投稿記事 by Xoke » 13年前

何度も申し訳ないです。

1)のcase3の判定をしてブレークポイントでも止めて、
  値の確認をしてFaseの値もあっていてStage_Drawに来ています。
2)Stage_Draw内のブレークポイントでもきちんと止まっています。
3)StageNumの値も1ステップごとに確認しましたがあっていると思います。

ですが、二回目のStage_Drawで裏画面にFase3の状態を描画しているはずなのですが、
なぜかScreenFlipのあとでWindowを見てもFase2の状態のままです。
これはどうしてなのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#12

投稿記事 by softya(ソフト屋) » 13年前

ScreenFlipした直後にそのフレームの実際の描画がGPUで始まりますので、実際に画面に反映されるのは次のScreenFlipです。

コード:

プログラム:	Draw1	→	ScreenFlip	→	Draw2	→	ScreenFlip	→	Draw3	→	ScreenFlip 
GPU動作:		動作なし				→	Draw1の内容を描画		→	Draw2の内容を描画
画面表示:		表示なし				→	表示なし				→	Draw1が表示
   
     
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#13

投稿記事 by Xoke » 13年前

GPUとは裏画面のことでしょうか?
もしそうでしたらループ内での
 裏画面から表画面へ描画
    ↓
 画面を消す
    ↓
 座標などの遷移等
    ↓
 裏画面に描画
という流れは理解しているつもりです。

そして先程少し言葉が足りなかったかもしれません。
レスNo.11での「二回目のStage_Draw」というのは起動してから二回目という意味です。
 起動してから一回目のStage_Draw
   ↓
 ScreenFlip
   ↓
 一度Menuに戻る
   ↓
 起動してから二回目のStage_Draw
   ↓
 ScreenFlip
このときのWindowが本来Stage画面のはずなのに、Menu画面のままでした。
この原因がどうしてもわからないです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#14

投稿記事 by softya(ソフト屋) » 13年前

最後のScreenFlip()が行われて始めて最初のDrawが画面に反映されます。
1フレーム目:Draw1
2フレーム目:Draw2 裏画面にDraw1を描画
3フレーム目:Draw3 裏画面にDraw2を描画 表画面にDraw1が表示
ですよ。表示されるまでにDraw後に2回のScreenFlip()が必要です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#15

投稿記事 by Xoke » 13年前

そうだったのですか。

ですがなんどScrennFlipしても反映されていないと思います。
なんだかわからなくなってきました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#16

投稿記事 by softya(ソフト屋) » 13年前

じゃあ、原因を絞り込みましょう。
Stage_Drawで表示が反映されない原因として考えられる事は何でしょうか? 現状において考えられるパターンを全部あげてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#17

投稿記事 by Xoke » 13年前

丁寧にありがとうございます。

StageNumの値などはきちんと入っていることが確認できたと思うので、
自分が思いつくのはあとはメモリ関係の問題しか思いつかないです。
いろいろ勉強不足で申し訳ないです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#18

投稿記事 by softya(ソフト屋) » 13年前

表示されな原因として考えられるのは、
1)座標が間違っている
2)StageNumが実は間違っている
3)画像ハンドルが正常ではない。

ちなみに、zipでもらったプログラムをVC++2008でコンパイル・実行した所、ちゃんと動いていて問題ないです。
文字の所をクリックしてステージの画像に切り替わればOKですよね?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#19

投稿記事 by Xoke » 13年前

すべて大丈夫だと思うんですけどね・・・

そちらでは動いているのですか!?
MenuとStage画面を何度もループさせることができてますでしょうか?
あとサムネイルどおりのステージが表示されていますでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#20

投稿記事 by softya(ソフト屋) » 13年前

今さっき試したのですが、ステージとメニューは交互にクリックで行き来できてますね。
念の為に、VC++のメニューからリビルドしてみてはどうでしょうか?それで直るかもしれません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#21

投稿記事 by Xoke » 13年前

直りました!!!
本当にありがとうございます。

正直よくわからないのですが、結局は何故だったのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#22

投稿記事 by softya(ソフト屋) » 13年前

Xoke さんが書きました:直りました!!!
本当にありがとうございます。

正直よくわからないのですが、結局は何故だったのでしょうか?
コンパイル中にソースを直したとか、ソースをどこからかコピーしてきて古いソースに戻した等が考えられますが何が起こったかはわかりません。
結果としてはコンパイルされるべき時に、コンパイルされていなかったものがあったと言うことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#23

投稿記事 by Xoke » 13年前

わかりました。
こんなことで二日も悩んでしまいましたが、
おかげでデバッガを使えるようになりましたし良かったです。
本当にありがとうございました。
またお願いいたします。

あと、このゲームが完成しましたら
みなさんにお暇があれば遊んでいただくのと同時に、
プログラムのアドバイスなどをもらいにまた上げにくるというのも大丈夫でしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#24

投稿記事 by softya(ソフト屋) » 13年前

作品お披露目掲示板もあるので活用してください。
「作品お披露目掲示板 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewforum.php?f=78
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#25

投稿記事 by Xoke » 13年前

分かりました。
完成したらそちらの方に行ってみたいと思います。

リファレンスを見たり調べてみてもそれっぽい関数が見つからなかったのでまた質問させてください。
画像を読み込んでその画像の指定のピクセルのRGBを取得することは可能ですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#26

投稿記事 by softya(ソフト屋) » 13年前

Xoke さんが書きました: リファレンスを見たり調べてみてもそれっぽい関数が見つからなかったのでまた質問させてください。
画像を読み込んでその画像の指定のピクセルのRGBを取得することは可能ですか?
とんでもなく遅いのでやらないほうが良いと思います。
必要な理由を教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#27

投稿記事 by Xoke » 13年前

そうなのですか。
タワーディフェンスゲームを作ろうと思っています。
最初にステージを読み込んだ時にマスごとにそこが道か道以外の場所か(タワーが設置出来る場所とできない場所)というのを、
そのマスの左上の色で判定しようと思っていました。
参考画像がさっき見ていただいたプログラムと一緒に入っていると思います。「Stage”X”.png」というファイルです。

画像から判定するなにかいい方法がないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: また行き詰まってしまいました。DXライブラリです。

#28

投稿記事 by softya(ソフト屋) » 13年前

マスのサイズが大きくマスの数がさほどない場合限定なら、さすがに左上1ドット程度ならロード時に処理するだけぐらいの余裕はあると思います。
LoadSoftImageで最初に情報だけ拾って、あとはハンドルを捨てれば良いでしょう。
http://homepage2.nifty.com/natupaji/DxL ... html#R20N1
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Xoke

Re: また行き詰まってしまいました。DXライブラリです。

#29

投稿記事 by Xoke » 13年前

ありがとうございます。
こんな関数です。
探すのが足りなかったですね。
またお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る