唯一のカメラモード変数をSingletonで管理...

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
もつ

唯一のカメラモード変数をSingletonで管理...

#1

投稿記事 by もつ » 10年前

カメラモードの管理についてです。
3人称視点
1人称視点
注視(ターゲット)
フリーカメラ
などなど色々なカメラモードがあると思います。

これらを管理するためにカメラクラスにint型のモード変数を用意してるのですが
ゲームメインクラス、自キャラクラス、敵クラス、カメラクラス
色々なところから参照・変更がしたい時が多々あります。
今までは各々クラスにstatic intで変数を持たせて、同じような関数を書いて、下記のように管理してましたが

コード:

static void Camera::SetCameMode( const int modeNum )
{ 
	mode = modeNum; 
	Player::SetCameMode( modeNum ); 
	Enemy::SetCameMode(modeNum); 
	Main::SetCameMode(modeNum);
}
ヘッダーインクルードも増えてきますし、毎度このコードを書くのも可読性下がるかなと思い
どうせカメラモード変数自体は唯一だしSingletonで管理しようかなと思って

コード:

class SingletonCameraMode{
public:
    // 唯一のアクセス経路
    static cSingletonCameraMode* GetInstance()
    {
	// 唯一のインスタンス
    	static cSingletonCameraMode instance;  
    	return &instance;
    }

	void	SetCameraMode( int mode){ camera_mode = mode; }
	int	GetCameraMode(){ return camera_mode;}

	enum
	{
		CAMERA_NORMAL,	//	通常時
		CAMERA_TARGETING,	//	ターゲッティングモード
		CAMERA_FPS,		//	一人称カメラ
		CAMERA_FIXED = 100
	};

private:
    // 生成やコピーを禁止する
    cSingletonCameraMode(){}
    cSingletonCameraMode(const cSingletonCameraMode& rhs);
    cSingletonCameraMode& operator=(const cSingletonCameraMode& rhs);

	//	共通のカメラモード
	int camera_mode;
};
このように書いたのですが、一つのintを管理するだけに作ってもよいものかと悩んでおります。
まだまだ勉強したてで不足な部分だらけですが、皆さんはどのように管理してらっしゃるのでしょうか。
よろしければ教えて頂けると嬉しいです。よろしくお願いします。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 唯一のカメラモード変数をSingletonで管理...

#2

投稿記事 by usao » 10年前

本当に
>一つのintを管理するだけ
なら,クラスで書かなくても良いような気もしますが…

コード:

namespace
{
  int camera_mode = 0;
};

int GetCameraMode(){  return camera_mode;  }
void SetCameraMode( int mode ){  camera_mode = mode;  }
ところで,何故,「現在の表示の様子がどうなってるのか」という情報を
>ゲームメインクラス、自キャラクラス、敵クラス
といった箇所が知る必要があるのでしょうか?
(現在の表示が3人称か否かで敵の振る舞いが変わる! とかいう話がある?)
[/offtopic]

もつ

Re: 唯一のカメラモード変数をSingletonで管理...

#3

投稿記事 by もつ » 10年前

usaoさん返信ありがとうございます。

本当に
>一つのintを管理するだけ
なら,クラスで書かなくても良いような気もしますが…
確かにご提示して頂いたものの方が簡明ですね...
もし機能を増やしたければクラス化すれば良いという事ですね。

ところで,何故,「現在の表示の様子がどうなってるのか」という情報を
>ゲームメインクラス、自キャラクラス、敵クラス
といった箇所が知る必要があるのでしょうか?
(現在の表示が3人称か否かで敵の振る舞いが変わる! とかいう話がある?)
その通りです。
1人称、注視状態の場合自キャラの挙動が変わります。
そして注視状態で注視してる敵を倒すと注視状態を解除しますが
敵の存在管理は敵クラスで行ってるので、敵クラスで注視状態を確認・解除したいです。
他にも今後そのような実装があると考え、カメラモード管理をまとめようと思って質問させて頂きました。

閉鎖

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