トップページ > 過去ログ > 記事閲覧
別の画像のはずが・・・
名前:Fe 日時: 2008/01/24 00:14

はじめまして。 最近DXライブラリによるプログラミングを始めたFeと申します。 早速ですが質問です。 LoadGraphで読み込んだ別々の画像を表示させてみたら両方同じ画像になっていました。 わかりにくいですね^^; つまり、 int Gr1,G2; Gr=LoadGraph("Gr1.png"); Gr=LoadGraph("Gr2.png"); などというようにしたとき、 Gr1を表示させたい位置にGr2が表示されてしまう、 ということです。 もう片方(上の例で言うならGr2)はきちんと表示させたい位置に表示されています。 また、宣言(Gr2=LoadGraph...)のくだりを削除して試してみると、 Gr2の表示されていた場所両方に今度はGr1が表示され、何が起きているのかいま一つわかりません。 どなたか教えていただけないでしょうか?

Page: 1 |

Re: 別の画像のはずが・・・ ( No.1 )
名前: 日時:2008/01/24 00:25

>int Gr1,G2; >Gr=LoadGraph("Gr1.png"); >Gr=LoadGraph("Gr2.png"); Grの宣言が無いようですが、 このコードだとコンパイル通らないのでは? Gr2だけ表示されるのは、 Gr1の画像を読み込んだGrをGr2で上書きしている 為でしょう。
Re: 別の画像のはずが・・・ ( No.2 )
名前:Fe 日時:2008/01/24 01:51

あ・・・ すいません。 例のつもりで書いたコードを普通にミスってました。 また書いてミスしたりするの嫌なんで問題のとこのコードを貼ります。 #include "DxLib.h" #define ITEM 1 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { //関係ない部分は省略させてもらいます。 int C1W1,C1W2,C1W3,C1W4,C1W5; int JobGraph; int WeponGraph[ITEM]; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // 描画先画面を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; JobGraph = LoadGraph("class1.png"); WeponGraph[1] = LoadGraph("wepon1.png"); C1W1 = 1; C1W2 = 0; C1W3 = 0; C1W4 = 0; C1W5 = 0; while(1) { DrawGraph(20,360,JobGraph,TRUE); DrawGraph(350,70,WeponGraph[C1W1],TRUE); DrawGraph(350,120,WeponGraph[C1W2],TRUE); DrawGraph(350,170,WeponGraph[C1W3],TRUE); DrawGraph(350,220,WeponGraph[C1W4],TRUE); DrawGraph(350,270,WeponGraph[C1W5],TRUE); ScreenFlip(); WaitKey(); } } 今の状況を簡略化するとこんな感じです。 シュミレーションRPG作っててステータスとアイテムの表示画面を作ってるんですが・・・。 クラスの書き方とかいま一つわからないんで、 本当はかなり長くなっちゃってます。 できればもう一度お願いしたいですが、とりあえず今日は寝させていただきます。
Re: 別の画像のはずが・・・ ( No.3 )
名前:やそ 日時:2008/01/24 11:20

#define ITEM 1 なので WeponGraph[1] = LoadGraph("wepon1.png"); はおかしくないですか? [0]と[1]の2つ使いたいなら #define ITEM 2 ですよね。 Feさんがどのように表示して欲しいのに、実行結果は○○と表示されてしまう。といった記述がないので指摘しづらいですが・・・。 WeponGraph[0] = LoadGraph("XXX.png"); がないので 2つめ以降の DrawGraph(350,120,WeponGraph[C1W2],TRUE); DrawGraph(350,170,WeponGraph[C1W3],TRUE); DrawGraph(350,220,WeponGraph[C1W4],TRUE); DrawGraph(350,270,WeponGraph[C1W5],TRUE); は表示されないんじゃ・・・ (ハンドルの値が不定だとどう表示されるのだろう?)
Re: 別の画像のはずが・・・ ( No.4 )
名前: 日時:2008/01/24 13:10

やそさんが既に指摘されていますが、 C言語での配列の添え字は0オリジン(0から)です #define ITEM 1 int WeponGraph[ITEM]; とするとint型の領域を1つ確保することになり、 WeponGraph[1]はメモリのアクセス違反になります。 >ハンドルの値が不定だとどう表示されるのだろう 一応読み込んだデータ数や画像データの有無、 ハンドルのタイプ、アドレスなどをチェック しているようなので、基本的にはDrawGraphが エラーで戻ると思います。 たまたま、アクセスできて読み込んだ画像がある 数値が入っていると正常に表示されたように見える かもしれません。
Re: 別の画像のはずが・・・ ( No.5 )
名前:Fe 日時:2008/01/24 16:22

やそさん、通さんのおっしゃる通りでした。 WeponGraph[1]のところを0にしたら正常に表示されました。 ありがとうございました。

Page: 1 |