- ベストアンサー
C言語 DxLib.hで画面スクロールが動かない問題
- C言語でゲームを作っていますが、DxLib.hを使って画面スクロールを作成しましたが、うまく動かないです。
- マップを2次元の配列で作り、game_pattern.bmpという画像ファイルをメモリ上に記録し、DrawRectGraphでマップを描画しているのですが、画面が真っ黒のままで何も表示されません。
- 初心者ですのでプログラムも汚いかもしれませんが、どこが原因で画面が表示されないのか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>とのことですが,裏画面にまずは画像を作りきってから表に表示するのですから,そもそも質問時のプログラムでは1マスずつの表示となりそれに反します。が,そのことを除いて,WinMain外で使うのは文法に反するのでしょうか。 文法ではなく、1画面分の描画がすべて終わった後でScreenFlip()する必要があります。 プログラムを見ると描画途中でScreenFlip()しているようですが。 あと初心者がScreenFlip()をあちこちに埋め込むと画面制御で思わぬバグを生むことになります。1箇所が望ましいですし上級者なら必ずそちらを選びます。 今のままだとwaitがあるので1秒ごとに1パーツですから、20x15で300秒も表示にかかる処理になりますが何か意味があるのですか? 本当にもしマップパーツを1秒に1パーツづつ表示するのが目的でも、ScreenFlip()に戻るようにしてください。 >これは,DXライブラリ初期化前にDXライブラリの関数を用いるな という理解でよろしいでしょうか。そういうことならワタクシの不注意なのですが,それ以外に理由があるのでしょうか。 これは、その通りです。
その他の回答 (1)
- zwi
- ベストアンサー率56% (730/1282)
やってはイケないことを沢山やっています。 1.ScreenFlip()があちこちにある。 → WinMainだけにしてください。 2.WaitTimer(1000);を使っている。 → 意味が分からないので、使わないでください。 3.LoadGraph()はDxLib_Init()後限定です。 → DxLib_Init()からWhile()の間にいれてください。LoadGraph("Tex1.bmp");を移動します。
補足
ありがとうございました。主に以下の修正の結果,所望の結果を得ましたこと報告します。 まずご指摘の3点について行いました。 また2次元配列の成分を取り違えていたので入れ替えて修正。 そしてLeftupy++;を書き忘れていたので書き足しました。 その結果,自分で設定したマップどおりのものが表示されました。 いくつか質問があります。 1.ScreenFlip()があちこちにある。 → WinMainだけにしてください。 とのことですが,裏画面にまずは画像を作りきってから表に表示するのですから,そもそも質問時のプログラムでは1マスずつの表示となりそれに反します。が,そのことを除いて,WinMain外で使うのは文法に反するのでしょうか。 3.LoadGraph()はDxLib_Init()後限定です。 → DxLib_Init()からWhile()の間にいれてください。 これは,DXライブラリ初期化前にDXライブラリの関数を用いるな という理解でよろしいでしょうか。そういうことならワタクシの不注意なのですが,それ以外に理由があるのでしょうか。 まだまだこんな感じなので先は長いのですががんばって見ます。ありがとうございました!
補足
ありがとうございます。 >文法ではなく、1画面分の描画がすべて終わった後でScreenFlip()する必要があります。 それはわかっています。1箇所にするようにします。 >今のままだとwaitがあるので1秒ごとに1パーツですから、20x15で300秒も表示にかかる処理になりますが何か意味があるのですか? WaitTimerのことでしょうか。これは意味がありません。このプログラムは質問前にいろいろ修正したのですがそれでも動かなかったので質問させていただきました。したがって修正段階の途中でほったらかしたままの部分が多くなってしまっています。WaitTimerは,どこまで処理が進んでいるのかを見極めるために入れたものをずっととり忘れていただけでした。