画像をクラスにどうやって渡すべきかが解りません
こんにちは、今回もC++のプログラミングについて質問させて頂きます。
現在勉強がてら作っている簡単なゲームで、処理を軽くするたびに画像ファイルを読み込む回数を減らそうとしています。、
プレイヤーのように最初から生成されているオブジェクトの場合はどうにか出来たのですが、プログラムの途中で生成するオブジェクトの場合、画像ファイルをどう読み込めば良いのか解らず困っています。
現在、炎の弾を作り出すメンバ関数
void Object::Shoot_FireBall(int Angle)//ファイアボール
{
FireBall* FireBall1 = new FireBall(true,5,Ref_x(),Ref_y(),charge,"FIREBALL",Angle,5,0,40,40,4,true,Image_FireBall,1.0,true,true);
if(Objects_Numbers>=Actions_Limit)
{
Objects_Numbers = Actions_Lower;
delete Objects[Objects_Numbers];
}
Objects[Objects_Numbers++] = FireBall1;
}
上記のコードの
FireBall(true,5,Ref_x(),Ref_y(),charge,"FIREBALL",Angle,5,0,40,40,4,true,Image_FireBall,1.0,true,true);
の中の Image_FireBall をどこで定義すれば良いかが解らず困っています
以前までは
void Player::Shoot_FireBall()//ファイアボール
{
FireBall* FireBall1 = new FireBall(5,Ref_x(),Ref_y(),charge,"FIREBALL",Ref_angle(),5,0,40,40,4,true,"Action/FireBall1.png",6,3,2,1.0,true,true);
if(FIRE_num>=FIRE_Limit)
FIRE_num = 1;
FIRE_Array[FIRE_num++] = FireBall1;
}
といったように画像ファイルの名前を渡し、FireBallのコンストラクター内で画像を取得していたのですが、それでは処理が重くなると聞き、修正しようとしています。
最初は画像ファイルをメインループに入る前に読みこめば良いのかと思ったのですが、それでは有効範囲が違うので定義されていない識別子とコンパイラに認識され使用することが出来ません。
グローバル宣言を使えばなんとかなるとは思うのですが、グローバル宣言はあまり多用しない方が良いようなので、他の方法を考え現在はObjectクラスの基底クラスGraphの中で
class Graph
{
public:
protected:
int *Image_FireBall;
};
Graph::Graph(bool Sub_bShow,int sub_x,int sub_y,int XSize , int YSize, double Sub_ExtRate, double sub_Angle,int Sub_Trans_Flag,int Sub_Turn_Flag,int* sub_Image)
{
Image_FireBall = new int[6];
LoadDivGraph("Action/FireBall1.png", 6, 3 , 2 ,40 , 40 , Image_FireBall);
}
/* 関係の無いメンバやその初期化については省いて載せています */
のようにしていますが、コレでは結局FireBallオブジェクトが生成される度に読み込まれているので処理は変わらないと思い、他の方法を探している所です。
一体どうやって定義するのが良いのでしょうか、良い方法があれば教えて頂けると助かります、宜しくお願いします。