武器(銃や剣)をカスタマイズできるシューティングゲームを作っています。
武器はそれぞれ特殊な動きや効果をつけたかったので、ハードコードでいいやと思い武器1種類につきクラスを1つ定義しました。
カスタマイズ画面で武器のクラス名string配列から選んで選択したクラスをインスタンス化して、キャラクターにセットしたいと思っているのですが、
string文字列からクラス名に変換することになるのですが、これは正しいのでしょうか?
↓こんな感じの処理を武器の種類数分記述することになって、泥臭いコードになるような・・・
Stringの比較なんてやるべきじゃなく、別の方法を探すほうがいいでしょうか?
武器のカスタマイズの選択画面について
- spaaaark・∀・
- 記事: 66
- 登録日時: 12年前
- 住所: 埼玉
- 連絡を取る:
Re: 武器のカスタマイズの選択画面について
どうでしょう、比較するものがstring型である必要がないようには思います。
僕の場合なら、名前を比較するより、それぞれの武器にハンドル(0,1,2,...)を打ち、決定した際にそのハンドルに対応した武器のインスタンスを生成すると思います。そうすることにより、
僕の場合なら、名前を比較するより、それぞれの武器にハンドル(0,1,2,...)を打ち、決定した際にそのハンドルに対応した武器のインスタンスを生成すると思います。そうすることにより、
のようなif構文のネストで比較する必要がなくなり、さらに状況によっては関数ポインタを利用してインスタンスを生成をすることが可能になると思います。
クリエイティブな生活で刺激的な毎日を!
- LisetteLander
- 記事: 147
- 登録日時: 14年前
- 住所: 東京
Re: 武器のカスタマイズの選択画面について
回答ありがとうございます。
ハンドルというのはどのようなものでしょうか?
いまいちピンと来ないです。
関数ポインタの配列みたいなものでしょうか?
あ、というか関数ポインタの配列って結構いいですね
ハンドルというのはどのようなものでしょうか?
いまいちピンと来ないです。
関数ポインタの配列みたいなものでしょうか?
あ、というか関数ポインタの配列って結構いいですね
- spaaaark・∀・
- 記事: 66
- 登録日時: 12年前
- 住所: 埼玉
- 連絡を取る:
Re: 武器のカスタマイズの選択画面について
例えば、武器Aなら0,武器Bなら1,武器Cなら2,... というように、武器の種類にあらかじめ0から番号を振ったものをハンドルとして、そのハンドルを使って条件の分岐を行います。なおハンドルにはもちろんint型(またはshort型)を推奨します。
そのハンドルを使って、たとえば以下のように処理を分けてやればいいのです。
このようにすることで、それぞれのインスタンスを生成できます。
また、もし関数ポインタが難しいと思いましたら、switch構文を使うのもありだと思います。
そのハンドルを使って、たとえば以下のように処理を分けてやればいいのです。
void WeaponA(){ //// ハンドル0番
//// 武器Aのインスタンスを生成
}
void WeaponB(){ //// ハンドル1番
//// 武器Bのインスタンスを生成
}
void WeaponC(){ //// ハンドル2番
//// 武器Cのインスタンスを生成
}
int main(){
void (*SetWeapon[])() = { //// 関数ポインタの宣言
&WeaponA,&WeaponB,&WeaponC
};
int Handle = 1; //// ここでは武器Bを選択したことになる
(*SetWeapon[ Handle ])(); //// 関数ポインタから関数を呼び出す
return 0;
}
また、もし関数ポインタが難しいと思いましたら、switch構文を使うのもありだと思います。
クリエイティブな生活で刺激的な毎日を!