トップページ > 過去ログ > 記事閲覧
画像が突然表示されなく・・・。
名前:ぐれーと 日時: 2010/09/25 16:22

ある画像をペイントで作って、ゲームに取り入れようとしたんですが、 それを取り入れたら、他の一つの画像が表示されなくなってしまいました。 2つの画像に関連性はなく、表示されなくなる意味が全く無いと思います。 LoadGraphでたくさん画像を読み込ませると、他の画像が表示されなくなることはあるんでしょうか?

Page: 1 |

Re: 画像が突然表示されなく・・・。 ( No.1 )
名前:Tororo 日時:2010/09/25 16:51

同じハンドルに読み込んで、 上書きされているとかでは? まぁ ソースを見せるのが一番の解決への近道ですけどね・・
Re: 画像が突然表示されなく・・・。 ( No.2 )
名前:埴輪 日時:2010/09/25 20:11

>LoadGraphでたくさん画像を読み込ませると、他の画像が表示されなくなることはあるんでしょうか? 数千枚ぐらいだとありうるようですが・・・、 Tororoさんのおっしゃるとおり、上書きが一番怪しいです。
Re: 画像が突然表示されなく・・・。 ( No.3 )
名前:ぐれーと 日時:2010/09/26 15:35

なんだか意味不明ですけど一応解決しました・・・。 上書きはしてません。 ソースをお見せします。 18行目くらいのintでたくさん宣言してある所の、 ohmozi[2] と sirusi に問題の画像のハンドルを その少し下の行で代入しています。 jankensirusi.png が表示されなくなった画像で、 jankeno&hmozi.pngが新しく取り入れた画像です。 「//←コレ」というのが4つ見つかったらひとまず、下にまだ文章がありますので読んでください。 #include "DxLib.h" int Key[256]; int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++; else GetHitKeyStateAll_InputKey[i]=0; } return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理 int siro = GetColor(255,255,255) , gazou[6] , syoubumozi[4] , ohmozi[2] //←コレ , taitoru , sirusi //←コレ, syoubu , startmozi , sx = 170 , sxs , sy = 260 , tz = 1 , mcount = 0 , smcount = 0 , zibun = -1 , aite = -1 , hantei = -1 ; SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定 sirusi = LoadGraph("jankensirusi.png");//←コレ taitoru = LoadGraph("jankentaitoru.png"); syoubu = LoadGraph("jankensyoubu.png"); startmozi= LoadGraph("jankenstartmozi.png"); LoadDivGraph("jankente.png" ,6,3,2,64 ,64,gazou); LoadDivGraph("jankensyoubumozi.png",4,2,2,200,50,syoubumozi); LoadDivGraph("jankeno&hmozi.png" ,2,1,2,150,50,ohmozi);//←コレ double t = GetNowCount(); while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2(Key) && !Key[KEY_INPUT_ESCAPE]){ //↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない //~~~~~~~~~~タイトル処理~~~~~~~~~~~~ if(tz == 1 || tz == 2){ DrawGraph(0,0,taitoru,FALSE); DrawGraph(sx,sy,sirusi,TRUE ); } sxs --; if(sx < 170) sxs += 7; sx += sxs; if(tz == 1 || tz == 2){ if(Key[KEY_INPUT_UP ] == 1){ sy = 260; tz = 1; } if(Key[KEY_INPUT_DOWN] == 1){ sy = 330; tz = 2; } } if(tz == 1 && Key[KEY_INPUT_SPACE] == 1 ) tz = 3; if(tz == 2 && Key[KEY_INPUT_SPACE] == 1 ) tz = 4; //---------------------------------- if(tz == 3){ //~~~~~~~~STARTの処理~~~~~~~~~~ SetDrawBlendMode( DX_BLENDMODE_ALPHA , 255 ) ; if(mcount < 100) SetDrawBlendMode( DX_BLENDMODE_ALPHA , 150 ) ; DrawGraph(0,0,syoubu,FALSE); mcount +=1 ; if(mcount < 100){ SetDrawBlendMode( DX_BLENDMODE_ALPHA , 255 ) ; DrawExtendGraph(170-mcount,221-mcount , 170+mcount+300,221+mcount+38, startmozi,TRUE); SetDrawBlendMode( DX_BLENDMODE_ALPHA , 150 ) ; } //---------------------------------- //時間測定、表示 double time = (GetNowCount() - t) /1000; DrawFormatString(0,0,siro,"%f",time); //~~~たたいて、かぶって、じゃんけんの文字表示処理~~~ if(mcount > 100){ smcount +=4 ; if(smcount < 200) DrawExtendGraph(0 ,400 , smcount ,400 +50, syoubumozi[0],TRUE); if(smcount > 200 && smcount < 400) DrawExtendGraph(100,430 , smcount-100,430 +50, syoubumozi[1],TRUE); if(smcount > 400 && smcount < 600) DrawExtendGraph(200,415 , smcount-200,415 +50, syoubumozi[2],TRUE); if(smcount > 600 && smcount < 800){ SetDrawBright(255 , 255-(smcount-600) , 255-(smcount-600) ); DrawExtendGraph(220+(smcount-600)/2,400 , 420-(smcount-600)/2,400+50 ,syoubumozi[3],TRUE); SetDrawBright(255,255,255); } if(smcount < 600 && (Key[KEY_INPUT_Z]==1 || Key[KEY_INPUT_X]==1 || Key[KEY_INPUT_C]==1) ); DrawGraph(245,200,ohmozi[0],TRUE); //テスト用にスペースを押せばsmcountが0になるようにする if(Key[KEY_INPUT_SPACE]==1) smcount = 0; //------------------------------------------------- if(smcount > 600 && smcount < 800){ //自分の手を決める if(Key[KEY_INPUT_Z]==1) zibun = 0; //グー if(Key[KEY_INPUT_X]==1) zibun = 1; //チョキ if(Key[KEY_INPUT_C]==1) zibun = 2; //パー //相手の手を決める if(Key[KEY_INPUT_Z]==1 || Key[KEY_INPUT_X]==1 || Key[KEY_INPUT_C]==1) aite = GetRand(2); //判定する if(zibun==0 && aite==0) hantei = 0; // あいこ if(zibun==1 && aite==1) hantei = 0; // あいこ if(zibun==2 && aite==2) hantei = 0; // あいこ if(zibun==0 && aite==1) hantei = 1; // かち if(zibun==1 && aite==2) hantei = 1; // かち if(zibun==2 && aite==0) hantei = 1; // かち if(zibun==0 && aite==2) hantei = 2; // まけ if(zibun==1 && aite==0) hantei = 2; // まけ if(zibun==2 && aite==1) hantei = 2; // まけ if(zibun==0) DrawGraph(225,230,gazou[0],TRUE); if(zibun==1) DrawGraph(225,230,gazou[1],TRUE); if(zibun==2) DrawGraph(225,230,gazou[2],TRUE); if(aite==0) DrawGraph(345,230,gazou[3],TRUE); if(aite==1) DrawGraph(345,230,gazou[4],TRUE); if(aite==2) DrawGraph(345,230,gazou[5],TRUE); if(hantei==0) DrawString(292,260,"あいこ",siro); if(hantei==1) DrawString(292,260," かち",siro); if(hantei==2) DrawString(292,260," まけ",siro); }//if(smcount > 600) }//if(mcount > 100) }//if(tz == 3) ScreenFlip();//裏画面を表画面に反映 } DxLib_End(); return 0; } 色々試してみたんですけど、奇妙な事に、 ohmozi[2]をohmozi[1]にするとsirusiの画像がちゃんと表示されるんですよね・・・。 それとsirusiの位置を最後尾のhantei = -1 の後に変えると、ちゃんと表示されるんです。 これは何が原因なんでしょうか?
Re: 画像が突然表示されなく・・・。 ( No.4 )
名前:T 日時:2010/09/26 15:47

配列でohmozi[2]と宣言されているので、用意された変数はohmozi[0]とohmozi[1]の二つです 0を一つ目として数えなければいけないので、ohmozi[2]は三つ目を参照する不正な添字となり、結果何も表示されない原因となります
Re: 画像が突然表示されなく・・・。 ( No.5 )
名前:ぐれーと 日時:2010/09/27 18:12

あ、すいません。 「ohmozi[2]をohmozi[1]にする」っていうのは、 宣言の部分をohmozi[2]からohmozi[1]に変えるという意味です。 それと、表示されなくなったのはsirusiの画像で、 ohmozi[2]の画像ではありません。
Re: 画像が突然表示されなく・・・。 ( No.6 )
名前:T 日時:2010/09/27 20:16

すみません、早とちりしていました とりあえずsxsが初期化されていないのと、途中のif文でif(〜);という形になっているとコンパイラで注意が出たので、修正されてはいかがでしょうか 特に、sxs変数はsx変数に加算されますから、枠外に描画されているのかもしれません
Re: 画像が突然表示されなく・・・。 ( No.7 )
名前:ぐれーと 日時:2010/09/28 17:45

初期化されてないとうまくいかないんですね。 やってみたらうまくいきました。ありがとうございます。 それと、if(〜);の形になっているというのはどういうことですか? それと、なぜohmozi[2]を作ったら表示されなくったんでしょうか?
Re: 画像が突然表示されなく・・・。 ( No.8 )
名前:ぐれーと 日時:2010/09/28 18:18

あ、if(〜);になってるところ見つかりました。 すいません。
Re: 画像が突然表示されなく・・・。 ( No.9 )
名前:T 日時:2010/09/28 21:39

>> なぜohmozi[2]を作ったら表示されなくったんでしょうか? すみませんが原因は私にはわかりません sxs変数が初期化されていない場合はとる値が不定なので、 sx += sxsの後には枠外に表示されて見えなくなっていたと推測できますが、 その場合ohmozi変数とは関係ないので… 今もohmozi[2]と宣言すると表示されないのでしょうか? もしそうでしたらsirusiとsx変数が実際にどんな値をとっているかを確認してみてください
Re: 画像が突然表示されなく・・・。 ( No.10 )
名前:ぐれーと 日時:2010/09/29 15:59

ohmoziとの関連は謎ですが、今はちゃんと表示されているので問題ないです。 >sx += sxsの後には枠外に表示されて見えなくなっていたと推測できますが、 確かに、一瞬は表示されてました。sx += sxsの後に見えなくなったんですね。 ご説明ありがとうございましたm(_ _)m

Page: 1 |