コンストラクタでの画像ロード

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

コンストラクタでの画像ロード

#1

投稿記事 by YYSS » 8年前

関数 + 構造体から、クラスに移行してみようと思い、
色々と頑張っているのですが・・・

画像のロードが上手くいきません;;

Dxライブラリを使用してます。


ヘッダーファイル(一部抜粋)

コード:

#include <DxLib.h>

class C_Player{

private:
	double X, Y;		//X軸Y軸
	bool Flag;	//存在
	int Life;			//残機
	int Speed;			//移動速度
	int Weapon;			//武装
	int Bomb;			//ボム数

	//画像
	int PlayerImg[ 2 ], OptionImg;

public:
	//コンストラクタ
	C_Player();
}

コンストラクタ部分

コード:

#include <DxLib.h>

C_Player :: C_Player(){

	//プレイヤー画像
	PlayerImg[0]	= LoadGraph( "data\\img\\Player1.png" );
	PlayerImg[1]	= LoadGraph( "data\\img\\Player2.png" );
	//オプション画像
	OptionImg		= LoadGraph( "data\\img\\Fam.png" );

}
とやっても、画像が読み込まれなくて、
表示しようとしても画像が表示されません・・・

変数をグローバル化して、メインルーチンで画像を読み込めば、
ちゃんと表示できるので画像のルートは間違ってないと思います。


コンストラクタでは画像は読み込めないのでしょうか?

アバター
MNS
記事: 35
登録日時: 9年前

Re: コンストラクタでの画像ロード

#2

投稿記事 by MNS » 8年前

そもそもコンストラクタが呼ばれているか、また、DXライブラリが初期化される以前に、
すなわちDxLib_Init関数の呼出の前に、コンストラクタが呼ばれていないかを確かめてみてください。
(DXライブラリを初期化しないと画像を読み込むことができません)

一般のクラスで、コンストラクタで画像が読み込めないなんてことはないです。

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

Re: コンストラクタでの画像ロード

#3

投稿記事 by YYSS » 8年前

MHSさんのおっしゃるとおり、DxLib_Initの前にコンストラクタが行われてました;;

なので、WinMain内のDxLib_Initの後に、オブジェクトの生成を行ったのですが・・・

コード:


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow ){

	//***** 必須 ****************************************
	LoadandSave( 0 );
	if( SAVE.Screen	== 1 ){
		//ウィンドウモード
		ChangeWindowMode( true );
	}
	//フルスク時の設定
	SetGraphMode( MAX_X, MAX_Y, 32 );
	//ログなし
	SetOutApplicationLogValidFlag( false );

	// DXライブラリ初期化処理
	if( DxLib_Init() == -1 ){
		return -1 ;			// エラーが起きたら直ちに終了
	}
	//描画を裏画面
	SetDrawScreen( DX_SCREEN_BACK );

	//****************************************************

	//初期化ルーチン
	Initialize();

	C_Player Player;


ファイル分割をしているので、他のファイルからPlayerを参照する時はどうすればいいのでしょうか・・・?
ファイルの先頭で

コード:

extern C_Player Player;
とやっても、コンパイルの最後に
1>Enemy.obj : error LNK2001: 外部シンボル ""class C_Player Player" (?Player@@3VC_Player@@A)" は未解決です。

と出てしまいます・・・


クラスを完全に理解しきれていないので、アドバイスをお願いします;;

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: コンストラクタでの画像ロード

#4

投稿記事 by h2so5 » 8年前

Playerはローカル変数として宣言されていますので、関数外からの参照はできません。
グローバル変数として宣言してください。

グローバル変数として宣言するとDxLib_Init関数の呼出の前にロードされてしまいますので、
C_PlayerクラスにLoad()などのメンバ関数を作ってそれを呼び出すことで後から画像を読み込めるようにすると良いと思います。

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

Re: コンストラクタでの画像ロード

#5

投稿記事 by YYSS » 8年前

h2so5さんに言われたとおり、
コンストラクタではなく、メンバ関数を使って読み込んだら上手くいきました。

ありがとうございました。

閉鎖

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