ページ 1 / 1
また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 18:16
by Xoke
こんにちは。
前回はありがとうございました。
またつまづいてしまったのでよろしければソースを見ていただいて、
その原因を教えていただきたいです。
以下のURLです。PWは「4110」です。
http://www1.axfc.net/uploader/so/2835132.zip
一応実行はできるのですがしばらくするとクリックしても応答しないようになってしまいます。
この原因を教えていただきたいです。
よろしくお願いいたします。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 19:27
by beatle
原因の究明を丸投げし過ぎている気がするので、もう少しご自分で頑張ってみて下さい。
Visual Studioをお使いなら、応答なしになったときにどのあたりを実行しているのか、などは分かるのではないでしょうか。
あとは、タスクマネージャでメモリ使用量を確認してメモリリークしてるかどうかを確認するとか。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 20:37
by Xoke
確かにそうですね、言葉が足りなくて申し訳ありません。
いろいろやってみたところ
最初1 Title画面表示
↓
2 Menu画面表示
↓
3 Stage画面表示
↓
4 End(×)ボタンを押して2まで戻る
ここらへんで止まるのでそこらへんの関数を昨日一日チェックしてみたのですが、
原因がわからなかったのでどなたかに教えていただきたくトピックを立てさせていただきました。
ここら辺で呼び出してる関数は
Stage_Draw,Menu_Draw,Stage_Initialize,Stage_Click,Menu_Click
等です。
改めてよろしくお願いしたいです。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 20:44
by softya(ソフト屋)
デバッガは使われていますか?
ブレークポイントで停止させて、F10でステップ実行する事で何処でループしているか確認することができます。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 20:55
by Xoke
以前見て下さった方でしょうか?
その節はありがとうございました。
デバッガですが一応以前使おうとしてみたのですが、
クリックされたらというのをどのように認識させたらいいのかわからなくてその時から使っていません。
クリックされてFaseの値が変わるというのをどのように認識させたらいいのですか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 21:01
by softya(ソフト屋)
Xoke さんが書きました:以前見て下さった方でしょうか?
その節はありがとうございました。
デバッガですが一応以前使おうとしてみたのですが、
クリックされたらというのをどのように認識させたらいいのかわからなくてその時から使っていません。
クリックされてFaseの値が変わるというのをどのように認識させたらいいのですか?
ブレークポイントの使い方はわかりますか?
クリックされた時の処理にブレークポイントを設定すればそこから追いかけられるはずです。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 21:31
by Xoke
ブレークポイントの使い方ですが、
今ちょっと使ってみたところ大体わかってきました。
便利ですねこれ。
そこで今いろいろ試していたところ
唐突に「利用可能なソースはありません」というような表示がでてきたのですが、
これはどういったときに出るものでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 21:35
by softya(ソフト屋)
F11とかでステップインしているとソースコードがないプログラムまで入り込んで「利用可能なソースはありません」と表示される事があると思いますが違いますでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月19日(火) 23:24
by Xoke
F11は今は押してないと思います。
どうやら「すべて中断」というのを行ったときになっていたようです。
これはそういうものなのでしょうか?
その後いろいろ見てみたところ、
最初1 Title画面表示
↓
2 Menu画面表示
↓
3 Stage画面表示
↓
4 End(×)ボタンを押して2まで戻る
のあと、
2 Menu画面表示
↓
3 Stage画面表示
またここへの過程でFaseは3のままなのにStage_Drawがうまく行われていませんでした。
この原因をいろいろ探して見たのですがよくわかりません。
教えていただけないでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 00:36
by softya(ソフト屋)
ここも頭の使いドコロです。
コード:
case 3:{
Stage_Draw(StageNum);
1)のcase 3:はちゃんと判定してStage_Draw(StageNum);の行に来てますか?ブレークポイントで止まりますか?
2)Stage_Draw内にブレークポイントを貼ったら、ちゃんとブレークポイントで止まりますか?
3)そして、StageNumの値は合っていますか?
を確認しないと確認したことには成らないですね。
テストの仕方に頭を振り絞ってください。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 01:14
by Xoke
何度も申し訳ないです。
1)のcase3の判定をしてブレークポイントでも止めて、
値の確認をしてFaseの値もあっていてStage_Drawに来ています。
2)Stage_Draw内のブレークポイントでもきちんと止まっています。
3)StageNumの値も1ステップごとに確認しましたがあっていると思います。
ですが、二回目のStage_Drawで裏画面にFase3の状態を描画しているはずなのですが、
なぜかScreenFlipのあとでWindowを見てもFase2の状態のままです。
これはどうしてなのでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 08:58
by softya(ソフト屋)
ScreenFlipした直後にそのフレームの実際の描画がGPUで始まりますので、実際に画面に反映されるのは次のScreenFlipです。
コード:
プログラム: Draw1 → ScreenFlip → Draw2 → ScreenFlip → Draw3 → ScreenFlip
GPU動作: 動作なし → Draw1の内容を描画 → Draw2の内容を描画
画面表示: 表示なし → 表示なし → Draw1が表示
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 10:07
by Xoke
GPUとは裏画面のことでしょうか?
もしそうでしたらループ内での
裏画面から表画面へ描画
↓
画面を消す
↓
座標などの遷移等
↓
裏画面に描画
という流れは理解しているつもりです。
そして先程少し言葉が足りなかったかもしれません。
レスNo.11での「二回目のStage_Draw」というのは起動してから二回目という意味です。
起動してから一回目のStage_Draw
↓
ScreenFlip
↓
一度Menuに戻る
↓
起動してから二回目のStage_Draw
↓
ScreenFlip
このときのWindowが本来Stage画面のはずなのに、Menu画面のままでした。
この原因がどうしてもわからないです。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 10:27
by softya(ソフト屋)
最後のScreenFlip()が行われて始めて最初のDrawが画面に反映されます。
1フレーム目:Draw1
2フレーム目:Draw2 裏画面にDraw1を描画
3フレーム目:Draw3 裏画面にDraw2を描画 表画面にDraw1が表示
ですよ。表示されるまでにDraw後に2回のScreenFlip()が必要です。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:05
by Xoke
そうだったのですか。
ですがなんどScrennFlipしても反映されていないと思います。
なんだかわからなくなってきました。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:11
by softya(ソフト屋)
じゃあ、原因を絞り込みましょう。
Stage_Drawで表示が反映されない原因として考えられる事は何でしょうか? 現状において考えられるパターンを全部あげてみてください。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:24
by Xoke
丁寧にありがとうございます。
StageNumの値などはきちんと入っていることが確認できたと思うので、
自分が思いつくのはあとはメモリ関係の問題しか思いつかないです。
いろいろ勉強不足で申し訳ないです。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:39
by softya(ソフト屋)
表示されな原因として考えられるのは、
1)座標が間違っている
2)StageNumが実は間違っている
3)画像ハンドルが正常ではない。
ちなみに、zipでもらったプログラムをVC++2008でコンパイル・実行した所、ちゃんと動いていて問題ないです。
文字の所をクリックしてステージの画像に切り替わればOKですよね?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:45
by Xoke
すべて大丈夫だと思うんですけどね・・・
そちらでは動いているのですか!?
MenuとStage画面を何度もループさせることができてますでしょうか?
あとサムネイルどおりのステージが表示されていますでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 11:54
by softya(ソフト屋)
今さっき試したのですが、ステージとメニューは交互にクリックで行き来できてますね。
念の為に、VC++のメニューからリビルドしてみてはどうでしょうか?それで直るかもしれません。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 12:10
by Xoke
直りました!!!
本当にありがとうございます。
正直よくわからないのですが、結局は何故だったのでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 12:18
by softya(ソフト屋)
Xoke さんが書きました:直りました!!!
本当にありがとうございます。
正直よくわからないのですが、結局は何故だったのでしょうか?
コンパイル中にソースを直したとか、ソースをどこからかコピーしてきて古いソースに戻した等が考えられますが何が起こったかはわかりません。
結果としてはコンパイルされるべき時に、コンパイルされていなかったものがあったと言うことです。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 12:26
by Xoke
わかりました。
こんなことで二日も悩んでしまいましたが、
おかげでデバッガを使えるようになりましたし良かったです。
本当にありがとうございました。
またお願いいたします。
あと、このゲームが完成しましたら
みなさんにお暇があれば遊んでいただくのと同時に、
プログラムのアドバイスなどをもらいにまた上げにくるというのも大丈夫でしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 12:35
by softya(ソフト屋)
作品お披露目掲示板もあるので活用してください。
「作品お披露目掲示板 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewforum.php?f=78
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 22:48
by Xoke
分かりました。
完成したらそちらの方に行ってみたいと思います。
リファレンスを見たり調べてみてもそれっぽい関数が見つからなかったのでまた質問させてください。
画像を読み込んでその画像の指定のピクセルのRGBを取得することは可能ですか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 22:50
by softya(ソフト屋)
Xoke さんが書きました:
リファレンスを見たり調べてみてもそれっぽい関数が見つからなかったのでまた質問させてください。
画像を読み込んでその画像の指定のピクセルのRGBを取得することは可能ですか?
とんでもなく遅いのでやらないほうが良いと思います。
必要な理由を教えて下さい。
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 23:00
by Xoke
そうなのですか。
タワーディフェンスゲームを作ろうと思っています。
最初にステージを読み込んだ時にマスごとにそこが道か道以外の場所か(タワーが設置出来る場所とできない場所)というのを、
そのマスの左上の色で判定しようと思っていました。
参考画像がさっき見ていただいたプログラムと一緒に入っていると思います。「Stage”X”.png」というファイルです。
画像から判定するなにかいい方法がないでしょうか?
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 23:15
by softya(ソフト屋)
マスのサイズが大きくマスの数がさほどない場合限定なら、さすがに左上1ドット程度ならロード時に処理するだけぐらいの余裕はあると思います。
LoadSoftImageで最初に情報だけ拾って、あとはハンドルを捨てれば良いでしょう。
http://homepage2.nifty.com/natupaji/DxL ... html#R20N1
Re: また行き詰まってしまいました。DXライブラリです。
Posted: 2013年3月20日(水) 23:38
by Xoke
ありがとうございます。
こんな関数です。
探すのが足りなかったですね。
またお願いします。