配列の共有
C++言語でゲームを作っているのですが
どうしても分からない部分があるので質問させてください
敵のビット(武装の方です)を管理するために、CBoss1_ringクラスとCBoss1_1_Groupクラスで
配列を共有しようと考えたのですが、うまくいきません
理想としては、CBoss1_ringクラスで生成したCBoss1_bitを、
CBoss1_ringクラスのs_bit配列に格納し、
CBoss1_1_Groupクラスのbit配列で、
CBoss1_ringクラスが持っている、s_bit配列のCBoss1_bitのMoveやDrawメソッドを使用したいのですが(本当に分かりづらくてすみません)
そもそもこの設計自体が間違いなのか、方法や手段が間違いなのか、もう何が間違いなのか分かりません。
より良い手段や、打開策など、無いものでしょうか。
よろしくお願いします。
以下ソース
CEnemyBoss,CEnemyBossは共通した変数やメソッドを持たせています
class CBoss1_bit : public CEnemyBoss_St1_1
{
public:
CBoss1_bit(double inx,double iny);
bool Move();
void Draw();
};
//--------
class CBoss1_ring : public CEnemyBoss_St1_1
{
CBoss1_bit* s_bit[5];
public:
CBoss1_ring(double inx,double iny, CBoss1_bit& bits);
bool Move();//ビットを生成する動作をここにいれる
void Draw();//ringの描写
};
CBoss1_ring::CBoss1_ring(double inx,double iny,CBoss1_bit& bits)
{
//↑適当なステータス設定をここより上で行う↑
*s_bit = &bits; //Groupクラスのbitをringクラスで共有したい
//↑ここでの処理がうまくいかない
//参照を使ってみていますが、もうよく分かりません
}
bool CBoss1_ring::Move()
{
//一定間隔タイミングでbitを生成しs_bit[i]に格納する(座標は適当です)
for(int i=0;i<5;i++)
s_bit[i] = new CBoss1_bit(GetRand(480)+160,GetRand(600));
return true;
}
//---------
class CBoss1_1_Group : public CEnemyBoss
{
CBoss1_bit* bit[5];//ビットパーツ
CBoss1_ring* ring;//ビットの生成を管理するパーツ
public:
bool Move();//全インスタンスの移動処理を行う
void Draw();//全インスタンスの描画処理を行う
};
CBoss1_1_Group::CBoss1_1_Group(double inx,double iny)
{
//各オブジェクトの生成を行う
//とりあえず生成してみている…
for(int i=0;i<5;i++) bit[i] = new CBoss1_bit(-60,-60);
/*bitの配列を渡して、ringクラスのs_bit配列と
bit配列で同じ中身?を共有したい*/
ring = new CBoss1_ring(inx,iny-220,**bit);
}
bool CBoss1_1_Group::Move()
{
for(int i=0;i<5;i++) if(bit[i])bit[i]->Move();
if(ring)ring->Move();
return true;
}
void CBoss1_1_Group::Draw()
{
for(int i=0;i<5;i++) if(bit[i])bit[i]->Draw();
if(ring)ring->Draw();
}
補足
回答ありがとうございます。 実際には画面上の点(ドット)を読み書きする16バイト程度のアセンブラコードを、メモリー上に最大ループ回数分のコードを展開して直線的に処理して、ループ判断処理と分岐時間を回避して高速処理することが目的です。 >あと、express版は上位版に比べて機能が制限されていたと記憶しています。 この点ですが、VS6の環境で出来たプロジェクトワークスペースをVS8に移行する際変換してビルドした場合は、この展開コードも問題なく動作してくれますが、VS8で新規プロジェクトを立ち上げソース等を6から持ってきた場合は不可のようです。 機能制限はこの分野では大丈夫のようです。 コンパイラオプションの設定方法を教えてください。