画像管理のヘッダーファイルを作りたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
でぶの極み重め
記事: 5
登録日時: 1ヶ月前

画像管理のヘッダーファイルを作りたい

#1

投稿記事 by でぶの極み重め » 1週間前

DXライブラリとC言語のみでゲームを作っているのですが、画像をロードして管理するだけのヘッダーファイルを作りたいです。以下のように作ってみたのですが、画像が表示されませんでした。
ヘッダーファイルで宣言した変数は使用できるのに、このような画像のパスや構造体が使用できない理由がわかりません。また、どのようにすれば使用できるか教えていただきたいです。

【Picture.h】

コード:

#ifndef PICTURE_H
#define PICTURE_H
#include <DxLib.h>

static int PictureX = 400;
static int PictureY = 400;
static int Handle00 = LoadGraph("画像//音街ウナ立ち絵素材ver1.0.png");	//音街ウナ立ち

#endif
【実行するファイル】

コード:

//描画
void Setting_Draw() {
	Achieve(Handle00);
	DrawFormatString(50, 50, white, "%d", Handle00);
}
【Achieve関数】

コード:

void Achieve(int Handle) {
	DrawGraph(PictureX, PictureY, Handle, TRUE);
	DrawFormatString(0, 0, white, "実行中");
}

アバター
みけCAT
記事: 6730
登録日時: 12年前
住所: 千葉県
連絡を取る:

Re: 画像管理のヘッダーファイルを作りたい

#2

投稿記事 by みけCAT » 1週間前

グローバル変数を初期化するための値の計算はエントリポイントとなる関数の呼び出しより前に行われるため、
画像を読み込む処理に必要なライブラリの初期化処理をエントリポイントとなる関数、
またはその関数から呼び出される関数で行っている場合、
その初期化処理より前に画像の読み込みが試みられてしまい、読み込みが失敗する原因となります。
以下のようなラッパーを作成し、画像の読み込みの前に必ずライブラリの初期化処理を行うようにすると改善するかもしれません。

コード:

void initializeLibrary(void) {
	static int inited = 0;
	if (!inited) {
		/* ライブラリの初期化処理を行う */

		inited = 1;
	}
}

int LoadGraphWithInit(const char* path) {
	initializeLibrary();
	return LoadGraph(path);
}

static int Handle00 = LoadGraphWithInit("画像//音街ウナ立ち絵素材ver1.0.png");	//音街ウナ立ち
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
あたっしゅ
記事: 658
登録日時: 12年前
住所: 東京23区
連絡を取る:

Re: 画像管理のヘッダーファイルを作りたい

#3

投稿記事 by あたっしゅ » 1週間前

[香車]東上☆あらし☆海美「
http://umezawa.dyndns.info/wordpress/?p=5939
グローバル変数の初期化順序を制御する - 或るプログラマの一生 プログラミングからチラシの裏まで(ja)

によると

> Visual C++ + Windows の場合、 #pragma init_seg を使えます。

だそうなので、

a.cpp

コード:

#pragma init_seg(lib)
int initDxLib = DxLib_Init();
b.cpp

コード:

#pragma init_seg(user)
int Handle00 = LoadGraph("Data/KabeTex.png");
とかやってみたけど、うまくいかず。
なので、

https://dxlib.xsrv.jp/cgi/aska/aska.cgi
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?
DxLIb 本家(ja) で聞いてみれば ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

でぶの極み重め
記事: 5
登録日時: 1ヶ月前

Re: 画像管理のヘッダーファイルを作りたい

#4

投稿記事 by でぶの極み重め » 6日前

立て込んでいて返信が遅れてしまい申し訳ないです。みけCATさん、あたっしゅさん、回答ありがとうございます!
グローバル変数がDXライブラリの関数をコンパイルする前に処理されてしまうため、グローバル変数を宣言し初期化する際に関数がうまく使用できず失敗してしまうという解釈で大丈夫でしょうか。
呼び出しや初期化の順序を意識してもう一度書いてみようと思います!!

アバター
あたっしゅ
記事: 658
登録日時: 12年前
住所: 東京23区
連絡を取る:

Re: 画像管理のヘッダーファイルを作りたい

#5

投稿記事 by あたっしゅ » 4日前

[香車]東上☆あらし☆海美「
グローバル変数の初期化の順番の指定法は、C/C++の規格では決められていないみみ。
だから、対処法もコンパイラ/リンカによって変わる。
DxLIb 自体に #pragma つけるなりして、コンパイルしなおせば動くかもしれんが、ワシは、やるきがない。
『美しく書きたい』という気持ちは、わからんでもないが、
『ゲームを作る』のが目的なら、ソースコードを凝ってもしょうがない。
ゲーム内容で勝負すべきだ。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

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