ページ 1 / 1
画像が消える
Posted: 2009年2月16日(月) 06:52
by kaba
最初のロード中というのでしょうか?
ロード中にウィンドウを画面外に持っていくとその部分が黒くなり
何をしても何も表示されなくなってしまいます。
そのような現象はどのようにしたら直りますでしょうか?
Re:画像が消える
Posted: 2009年2月16日(月) 10:26
by 御津凪
簡単に説明すると、何も表示されないのは再描画されていないためです。
ロード中でも描画処理がなされていれば、きちんと描画されます。
(が、ロード中では描画もおろそかになりやすいため、完全に直すことは難しいです)
Re:画像が消える
Posted: 2009年2月16日(月) 12:53
by Dixq (管理人)
ウィンドウがノンアクティブでも処理を続けるようにしたらいいと思います。
SetAlwaysRunという関数だったと(名前違うかもしれません)思います。
これをTRUEにしておくと、ノンアクティブでも処理を続けます。
DXライブラリのリファレンスに書いてありますので、そちらをご覧下さい。
Re:画像が消える
Posted: 2009年2月16日(月) 15:35
by kaba
↑名前の書き忘れしました。
Re:画像が消える
Posted: 2009年2月16日(月) 15:37
by kaba
↑の間違えました;;
すいません;;
SetAlwaysRunでは出来ず
SetAlwaysRunFlagでやってみましたが出来ません。
>ロード中でも描画処理がなされていれば、きちんと描画されます。
ロード中ではないんですが
黒くなった部分はゲームが始まって他の絵が表示されても
その部分だけ黒くなったまま直りません。
分かりますでしょうか?
Re:画像が消える
Posted: 2009年2月18日(水) 05:24
by Dixq (管理人)
う~ん、プログラムコードはどんなコードですか?
Re:画像が消える
Posted: 2009年2月21日(土) 04:14
by コスモ
横やりを入れるようで済みません。
現時点では問題のプログラムのソースコードが無いので詳しくはわかりませんが…。
再描画処理について御津凪さんがおっしゃっていますが、
この処理が
int WINAPI Winmain(~){
(この部分)
}
に無いのが原因ではないでしょうか?
Re:画像が消える
Posted: 2009年2月21日(土) 04:51
by kaba
Dixqさんすいません全く気づかず返事してませんでした・・・
もしかしたら再描画処理というものを勘違いしていたかもしれません。
ただ単に新しい画像が表示されたからって再描画されたわけじゃないんですよね?
再描画処理とはいったいどんな事を書けばよろしいのでしょうか?
コードを上げた方がよろしいでしょうか?
Re:画像が消える
Posted: 2009年2月21日(土) 05:37
by コスモ
>コードを上げた方がよろしいでしょうか?
Dixqさんではないですが…コードは上げた方が良いと思います。
その方がこちらも具体的な原因が分かりますし。
Re:画像が消える
Posted: 2009年2月21日(土) 05:59
by kaba
http://www1.axfc.net/uploader/H/so/70719
コードも長くどこを上げたら良いのかわからないので
そのまんま圧縮して斧に上げました。
パスは「脱出」です。
そのまんまコピーしたりしてたので関係ない説明文などあったりします。
手間を取らせて申し訳ないですがよろしくお願いします。
Re:画像が消える
Posted: 2009年2月21日(土) 08:22
by toyo
WinMain( )とwann( )にreturnがありませんね。return 0;を追加しましょう。
wann( )にDxLib_Init( )が2箇所あって動きませんでした。
if( DxLib_Init() == -1 )return -1;
を削除したところ表示されるようになりました。
私の環境ではウィンドーを画面の外に出したり他のウィンドーで隠したりしましたが消えることはありませんでしたよ。
水が出てゲームオーバーになるところまでやりました。
Re:画像が消える
Posted: 2009年2月21日(土) 08:33
by toyo
質問をよく読んでませんでした
ロード中というか初期化中にウィンドーを画面の外に出すんですね
確かに真っ黒になりました
Re:画像が消える
Posted: 2009年2月21日(土) 08:48
by toyo
初期化関数の後に
SetDrawArea(0, 0, 639, 479);
で描画領域をリセットすればよさそうです。
Re:画像が消える
Posted: 2009年2月21日(土) 08:51
by コスモ
DXライブラリのレファレンスを見てみましたが、
初期化中にウィンドウが隠されると再描画するような関数はないようです。
toyoさんの方法か、フルスクリーンで起動するように変更してみてはどうでしょうか?
int WINAPI WinMain(~){
… …
}
return 0;
}
と
//画像音楽ロード
int wann(void){
{
… …
}
return 0;
}
のreturn 0;が抜けています。
warning C4996: 'fopen'の警告を消すには
#include ~
と
int a=0
の間のどこかに
#pragma warning(disable:4996)
を追加すればこの警告は消すことが出来ます。
Re:画像が消える
Posted: 2009年2月21日(土) 09:24
by kaba
>WinMain( )とwann( )にreturnがありませんね。return 0;を追加しましょう。
勉強不足でreturn 0;を書く理由がいまだに
分からないんですが書いておきました。
ありがとうございます。
>wann( )にDxLib_Init( )が2箇所あって動きませんでした。
コピーばっかりしていたので気づきませんでした。
自分のPCでは起動したんですがPCによっては起動しないんですかね?
ありがとうございます。
>初期化関数の後に
>SetDrawArea(0, 0, 639, 479);
ウィンドー下と右が1ドット足らなかったので
SetDrawArea(0, 0, 640, 480);でやったらピッタリできました。
画面外に出してもちゃんと映りました。
ありがとうございます。
>#pragma warning(disable:4996)
>を追加すればこの警告は消すことが出来ます。
warning C4996: 'fopen'の警告が何を意味してるのかも分からず
警告がどこに出ていたのか分からなかったのですが
書いておきました。
ありがとうございます。
御津凪さん Dixqさん toyoさん cosmoさん
今回はありがとうございました。
Re:画像が消える
Posted: 2009年2月21日(土) 09:56
by コスモ
"解決"と出ていますが一応追記です。
>warning C4996: 'fopen'の警告が何を意味してるのかも分からず
>警告がどこに出ていたのか分からなかったのですが
>書いておきました。
についてですが、fopen関数は例外が発生した時にそれを通知する手段を持たないのです。
fopen関数よりもセキュリティを強化した…と言うか
例外が発生した時に通知する手段を持つ関数fopen_s関数があります。
…とマイクロソフトのリファレンス
http://msdn.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx
に書かれています。
自分なりの解釈が含まれているかもしれませんが、
warning C4996: 'fopen'の警告は
「出来るだけfopen関数ではなく、fopen_s関数の方を使ってください」
と言う意味を表していると思います。
fopen関数とfopen_s関数の引数の違いについてですが、
fopen関数の引数は2ですが、fopen_s関数の引数は3であることに注意が必要です。
必要なヘッダーはstudio.hでfopen関数を使う時と同じです。
fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
の定義中でそれぞれ
pFile:
開かれたファイルへのポインタを受け取るファイル ポインタへのポインタ。
filename:
ファイル名。
mode:
アクセス許可の種類。
を表しています。
fopen関数と比べて"FILE** pFile,"の引数が増えています。
Re:画像が消える
Posted: 2009年2月21日(土) 10:55
by kaba
大体分かりました。
ありがとうございます。
Re:画像が消える
Posted: 2009年2月21日(土) 17:33
by Dixq (管理人)
>return 0;
これについてはC言語の入門サイトで「関数」の分野を勉強すればよいです。
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
7章を一通り読んでみて下さい。
Re:画像が消える
Posted: 2009年2月21日(土) 23:44
by kaba
大体分かりました。
解決しているのに皆さんありがとうございます。