LoadGraphについて外部変数に出来ますか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
深黒

LoadGraphについて外部変数に出来ますか?

#1

投稿記事 by 深黒 » 15年前

タイトルの通りです。

#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は外部変数だと使えないのでしょうか?

紅葉

無題

#2

投稿記事 by 紅葉 » 15年前

あまり詳しくないので違ってたら申し訳ないのですが
DX_Initを呼ばないとライブラリを使えなかったような気が・・・
それとInit後にLoadを呼ばなかった行けなかった気がします。

深黒

Re:無題

#3

投稿記事 by 深黒 » 15年前

すみません、書き忘れです・・・
見せるプログラムを減らすとよく何かを書き忘れてしまいます・・・
#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;
}

Poco

Re:LoadGraphについて外部変数に出来ますか?

#4

投稿記事 by Poco » 15年前

> LoadGraphは外部変数だと使えないのでしょうか?

上記のような使い方では、使えないと思った方が良いです。

グローバル変数はmain()関数が始まる前に初期されます。
フローバル変数の初期化順序は処理系依存です。
LoadGraph()はDxLib_Init()が呼ばれるまでは正常に動作しません。

以上を踏まえて、深黒さんがやりたい事を実現するには、
「初期化順序が不定であるグローバル変数が初期される前に、DxLib_Init()を呼び出す。」
必要があります。矛盾してますね。
画像

Justy

Re:LoadGraphについて外部変数に出来ますか?

#5

投稿記事 by Justy » 15年前

>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について外部変数に出来ますか?

#6

投稿記事 by 深黒 » 15年前

返信ありがとうございました。
うーん、結構面倒ですね・・・
無理に外部変数にするのはやめとこうと思います

Dixq (管理人)

Re:LoadGraphについて外部変数に出来ますか?

#7

投稿記事 by Dixq (管理人) » 15年前

いやいや、単に代入を後にすればいいだけでは・・。

ゲームプログラミングにおいて、宣言と同時に変数に画像のロードをしたりすることはあまりないと思います。

初期化やロードの関数やコンストラクタがあり、その中でロードするのが普通だと思います。

別に宣言と同時に代入しないといけない事は無いのですから、面倒だと思う事は無いと思いますよ。

閉鎖

“C言語何でも質問掲示板” へ戻る