ページ 1 / 1
LoadGraphについて外部変数に出来ますか?
Posted: 2010年6月06日(日) 00:15
by 深黒
タイトルの通りです。
#include "DxLib.h"
int fie=LoadGraph( "field.bmp" ) ;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE); // ウインドウモードに変更
SetGraphMode(800,600,32);
DrawGraph(0,0,fie,FALSE);
その他諸々の処理;
}
こんな感じに外部変数を使っているのですが、画像が表示されません。
LoadGraphは外部変数だと使えないのでしょうか?
無題
Posted: 2010年6月06日(日) 00:26
by 紅葉
あまり詳しくないので違ってたら申し訳ないのですが
DX_Initを呼ばないとライブラリを使えなかったような気が・・・
それとInit後にLoadを呼ばなかった行けなかった気がします。
Re:無題
Posted: 2010年6月06日(日) 00:30
by 深黒
すみません、書き忘れです・・・
見せるプログラムを減らすとよく何かを書き忘れてしまいます・・・
#include "DxLib.h"
int fie=LoadGraph( "field.bmp" ) ;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE); // ウインドウモードに変更
SetGraphMode(800,600,32);
if( DxLib_Init()==-1) return -1;// DXライブラリ初期化処理 エラーが起きたら終了
DrawGraph(0,0,fie,FALSE);
その他諸々の処理;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0;
}
Re:LoadGraphについて外部変数に出来ますか?
Posted: 2010年6月06日(日) 00:30
by Poco
> LoadGraphは外部変数だと使えないのでしょうか?
上記のような使い方では、使えないと思った方が良いです。
グローバル変数はmain()関数が始まる前に初期されます。
フローバル変数の初期化順序は処理系依存です。
LoadGraph()はDxLib_Init()が呼ばれるまでは正常に動作しません。
以上を踏まえて、深黒さんがやりたい事を実現するには、
「初期化順序が不定であるグローバル変数が初期される前に、DxLib_Init()を呼び出す。」
必要があります。矛盾してますね。

Re:LoadGraphについて外部変数に出来ますか?
Posted: 2010年6月06日(日) 01:19
by Justy
>LoadGraphは外部変数だと使えないのでしょうか?
出来るか出来ないかで言えば出来ます。
同一翻訳単位の中であれば関数外の静的オブジェクトは定義順に初期化されますので、
[color=#d0d0ff" face="monospace]
int inited = (ChangeWindowMode(TRUE) == DX_CHANGESCREEN_OK && SetGraphMode(800,600,32) == DX_CHANGESCREEN_OK && !DxLib_Init())? TRUE: FALSE;
int fie= inited? LoadGraph( "test.jpg" ): -1;
[/color]
と同一ファイルに書くか、いっそのことまとめて
[color=#d0d0ff" face="monospace]
int fie= (ChangeWindowMode(TRUE) == DX_CHANGESCREEN_OK && SetGraphMode(800,600,32) == DX_CHANGESCREEN_OK && !DxLib_Init())? LoadGraph( "test.jpg" ): -1;
[/color]
とすれば理論的には可能です。
しかし、このようなコードはいろいろな問題を引き起こしかねないのでお勧めは出来ません。
普通に WinMain関数が実行されてから各種初期化・ロードを行うようにした方がいいでしょう。

Re:LoadGraphについて外部変数に出来ますか?
Posted: 2010年6月06日(日) 01:46
by 深黒
返信ありがとうございました。
うーん、結構面倒ですね・・・
無理に外部変数にするのはやめとこうと思います
Re:LoadGraphについて外部変数に出来ますか?
Posted: 2010年6月06日(日) 02:19
by Dixq (管理人)
いやいや、単に代入を後にすればいいだけでは・・。
ゲームプログラミングにおいて、宣言と同時に変数に画像のロードをしたりすることはあまりないと思います。
初期化やロードの関数やコンストラクタがあり、その中でロードするのが普通だと思います。
別に宣言と同時に代入しないといけない事は無いのですから、面倒だと思う事は無いと思いますよ。