引数にクラス
Posted: 2012年5月01日(火) 18:18
現在VC++2010でゲーム開発を行っています
敵キャラクターとプレイヤーキャラクターには共通の動作がありますので
それを関数にして、引数に敵クラス、プレイヤークラスを適用して動作させたいと考えています
以下、現在のソースコードです
クラスでゲームを作るのは初めてなので色々と試行錯誤しながらやっています
敵クラスとプレイヤークラスでステージモデルとの当たり判定と進む方向にキャラクターモデルを回転させる処理
を共有させたいので大元のCharacterクラスに当たり判定と回転処理の関数を記述し、それを敵クラスとプレイヤークラス
それぞれに継承させてこの2つの関数を使えるようにしたいと思っています
質問1
抽象的な質問ですがこの方法は大丈夫でしょうか?
自分でコードを書いてなんですが不安になります
質問2
player.cpp enemy.cppともにplayer::posのようにスコープ解決演算子を使ってコードを書いています
各クラスのオブジェクト化はさらに上位のクラスのGameMainで行っています
クラスを引数にする場合はオブジェクト化したものだけに限られるのでしょうか?
説明で足りない部分があれば追記させていただきます
教えて頂ければ幸いです
敵キャラクターとプレイヤーキャラクターには共通の動作がありますので
それを関数にして、引数に敵クラス、プレイヤークラスを適用して動作させたいと考えています
以下、現在のソースコードです
// Character.h
// キャラクタークラス
//敵クラス、プレイヤークラスに継承させる
class Character{
// キャラクターモデルとの壁、床の当たり判定
void Collision( Character *ch);
// キャラクターモデルの向きを変更する処理
void AngleProcess( Character *ch );
//これら二つの関数の引数に敵クラス、プレイヤークラスのポインタを渡したい
};
// Character.cpp
#include"Character.h"
// キャラクターモデルとの壁、床の当たり判定
void Collision( Character *ch){
ch->pos = nextpos;
// アロー演算子を使って色々処理させる
}
// キャラクターモデルの向きを変更する処理
void AngleProcess( Character *ch ){
ch->angle = PHI ;
// アロー演算子を使って色々処理させる
}
//player.h
#include"Character.h"
class player : public Character{
void Player_Move();
//色々宣言する
}
//enemy.h
#include"Character.h"
class enemy : public Character{
void enemy_Move();
//色々宣言する
}
//player.cpp
void Player_Move(){
// キャラクターのベクトルを求めたりして、移動させる
// キャラクターモデルとの壁、床の当たり判定
Collision( &player ); // error C2275: 'player' : この型は演算子として使用できません
// キャラクターモデルの向きを変更する処理
AngleProcess( &player ); // error C2275: 'player' : この型は演算子として使用できません
}
//enemy.cpp
void enemy_Move(){
// キャラクターのベクトルを求めたりして、移動させる
// キャラクターモデルとの壁、床の当たり判定
Collision( &enemy );// error C2275: 'enemy' : この型は演算子として使用できません
// キャラクターモデルの向きを変更する処理
AngleProcess( &enemy );// error C2275: 'enemy' : この型は演算子として使用できません
}
クラスでゲームを作るのは初めてなので色々と試行錯誤しながらやっています
敵クラスとプレイヤークラスでステージモデルとの当たり判定と進む方向にキャラクターモデルを回転させる処理
を共有させたいので大元のCharacterクラスに当たり判定と回転処理の関数を記述し、それを敵クラスとプレイヤークラス
それぞれに継承させてこの2つの関数を使えるようにしたいと思っています
質問1
抽象的な質問ですがこの方法は大丈夫でしょうか?
自分でコードを書いてなんですが不安になります
質問2
player.cpp enemy.cppともにplayer::posのようにスコープ解決演算子を使ってコードを書いています
各クラスのオブジェクト化はさらに上位のクラスのGameMainで行っています
クラスを引数にする場合はオブジェクト化したものだけに限られるのでしょうか?
説明で足りない部分があれば追記させていただきます
教えて頂ければ幸いです