トップページ > 過去ログ > 記事閲覧
違う画像が表示される
名前:ロドリゲス 日時: 2012/12/28 20:27

こんにちは。 先ほどA = LoadGraphにて変数(A)に画像ファイル(test1.png)を読み込ませてDrawGraphしました。(Aは変数名です) 表示されるのですが、B = LoadGraphにて変数(B)に別ファイル(test2.png)を読み込ませてDrawGraphさせると、何故か変数Aに入っているtest1.pngが表示されてしまいます。 何故でしょうか? よろしくお願いします。

Page: 1 |

Re: 違う画像が表示される ( No.1 )
名前:Will 日時:2012/12/29 09:22

あなたの作られたプログラムに間違いがあるとしか言えません。 具体的な回答がほしいのであれば、ソースコードを提示してください。
Re: 違う画像が表示される ( No.2 )
名前:ロドリゲス 日時:2012/12/29 20:18

ありがとうございます。 一応簡単なプログラムでしたらきちんと動きました。 それと静的変数(関数も)を関数外に大量に宣言したりして1つの関数でその変数に画像データーを代入していたのですが、そういった場合はなにかのエラー(バグ?不具合?)でこうなることはありえますか? それと自分でのスパゲティなのは気付いていたのでこれを良い機会に組み直そうかと思います。 よろしくお願いします。
Re: 違う画像が表示される ( No.3 )
名前:Will 日時:2012/12/29 21:38

プログラムは思ったとおりに動きません。 書いたソースコードの通りに動きます。 つまり、コードの書き間違いです。 Bに入れているつもりがAとなっていたり、Bに2の画像をロードしたあとに1の画像をロードしたり、 Bを表示しているつもりがAを表示していたり。 ゴチャゴチャしているソースコードだと、そういう単純な間違いが見つけづらくなります。
Re: 違う画像が表示される ( No.4 )
名前:softya(ソフト屋) 日時:2012/12/30 11:58

staticやグローバルな変数が汎用的に使い回されているとしたら、それは根本的な設計ミスです。 まぁ、初心者の方は予想を超える使い方をしますので、ソースコードを見ないとなんとも言えないのですが。
Re: 違う画像が表示される ( No.5 )
名前:ロドリゲス 日時:2012/12/30 21:07

ありがとうございます。 確かにstaticなどでの大量に使うのは好ましくないですね・・・。 ヘッダーを使ってやるのが理想的かもですね。 プログラミングの館さんのページで分割する場合の記事を読みました。 私のプログラムの流れとしては main(main.cpp)→GraphicsLoad(AllLoad.cpp)→DrawPart(DrawP.cpp)→DrawPoint((ここで描画する(PointD.cpp))→(DrawPointにもどる) という流れです。 こういう場合だとGraphicsLoadにてstatic変数に画像データーを入れたら、そのファイル内(AllLoaded.cpp)でしか使用できなくなってしまうわけですよね。 でその変数を他ファイルにある関数でも使用できるようにAllLoaded.hを作りそこで変数と関数を書いておいてPointD.cppにそのヘッダーをincludeさせればDrawPointでもその変数に入った画像ファイルを表示できるという解釈でいいのでしょうか? よろしくお願いします。
Re: 違う画像が表示される ( No.6 )
名前:softya(ソフト屋) 日時:2012/12/30 22:35

そもそもヘッダーで共有する変数は極力避けるのが基本的なバグを出さないための方策です。 1.グローバルスコープな変数 2.ファイルスコープな変数 3.ローカルスコープな変数 悪い作りとして 1 > 2 > 3 で良くないので3が一番望ましい事になります、 ただ、3は3で利便性に問題があるので保存したい場合は、2が定番となります。 あるいは、3にするために引数で受け渡すことも最大限に考慮します。 そういう事は、プログラミングの館の「ゲームの設計と分割コンパイル」にも書かれています。 なので、推奨はロードと処理と描画が1つのファイルに纏まっていることです。
Re: 違う画像が表示される ( No.7 )
名前:ロドリゲス 日時:2012/12/31 21:13

なるほど。 1つにまとめさせると・・・。たしかにそうすれば安定しますよね。 しかし今回はマップにつかう画像データーが多すぎるので分けたい気もするのですが・・・。 ありがとうございます。 一応動きました。 AllLoad.cppで関数外でstatic int にて宣言していて、PointD.cppの関数外でextern int してたらエラーだったのですが、staticをはずして普通にintにしたら通りました。 関数外ではstaticつけてもつけなくてもよかったんですもんね。しかしなぜ付けるとエラー出るのかが気にありますが・・・。 頑張って作ってみます。 ありがとうございます。
Re: 違う画像が表示される ( No.8 )
名前:softya(ソフト屋) 日時:2013/01/01 00:50

プロ的なRPGの作りかただとマップ処理は共通化されるので1つに出来ます。 そうでもしないと長編RPGなどやっていられません。 >AllLoad.cppで関数外でstatic int にて宣言していて、PointD.cppの関数外でextern int してたらエラーだったのですが、staticをはずして普通にintにしたら通りました。 関数外ではstaticつけてもつけなくてもよかったんですもんね。しかしなぜ付けるとエラー出るのかが気にありますが・・・。 staticを付ければ定義する場所しだいですがファイルスコープかローカルスコープしかなりません。 グローバルスコープは、staticを付けてはいけません。

Page: 1 |