【cocos2dx】アクセッサを利用する - CC_SYNTHESIZE

以前にもブログに書いていなかったのですが、最近「アクセッサ」をcocos2dxを勉強して、徐々に利用するようにしています。 簡単ながら、今回はその「アクセッサ」の使い方について紹介をしたいと思います。

アクセッサ

「アクセッサ」とは外部から呼び出すことができ、内部のメンバ変数に読み書きする働きをする関数のことです。

利用方法

まずはアクセッサの定義をヘッダーファイルで行います。

[c] //定義 protected:

CC_SYNTHESIZE(型,protectes変数,関数名);

//例 CC_SYNTHESIZE(int, _hp, HP);

[/c]

[CC_SYNTHESIZE]というマクロを利用します。 これは以下のように記述をした場合と同じになります。 [c] protected:

  型 protected変数;

public:

  virtual void set+関数名(型 引数){protected変数  = 引数}
  virtual 型 get+関数名(void) const {return protected変数;}

[/c]

具体的例例 - 他のクラスから値を呼び出す・書き換える

アクセッサは、別のクラス内でインスタンス化をして場合に利用をします。 [c] //Characterクラスのインスタンスを作成 auto character = Character::create();

//アクセッサを使って呼び出す int playerHP = character->getHP();

//アクセッサを使って書き換える character->setHP(50);

[/c]

読み込み専用

変数を変更する必要がない場合は、以下のマクロ定義を使うほうがより安全です。 [c]

//このように定義する CC_SYNTHESIZE_READONLY(型,protectes変数,関数名);

//これと同じ意味 protected:

  型 protected変数;

public:

  virtual 型 get+関数名(void) const {return protected変数;}

[/c]

CC_PROPERTY

もう一つ、[CC_PROPERTY]といマクロ関数があります。 これは、アクセッサに似ているのですが、get/setのメソッドをcppに書く必要があります。 [c] //.h CC_PROPERTY(int, _hp, HP);

//.cpp

int Charactor::getHP(){

return _hp;

}

void Charactor::setHP(int hp){

_hp = hp;

} [/c]

この場合は、get/setを自分で書くことができるので複雑な処理ができるみたいです。 補修性を高めるために、利用すればコードががすっきりしそうですね。

【参考】

C++の基礎 : アクセス制限
。このように、外部から呼び出すことができ、内部のメンバ変数に読み書きする働きをする関数のことをアクセッサといいます ...

Cocos2d-xスマートフォン2Dゲーム開発講座 Cocos2d-x 3対応 (SMART GAME DEVELOPER)Cocos2d-xスマートフォン2Dゲーム開発講座 Cocos2d-x 3対応 (SMART GAME DEVELOPER)
株式会社TKS2

翔泳社
売り上げランキング : 7293

Amazonで詳しく見る