以前にもブログに書いていなかったのですが、最近「アクセッサ」を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を自分で書くことができるので複雑な処理ができるみたいです。 補修性を高めるために、利用すればコードががすっきりしそうですね。
【参考】
Cocos2d-xスマートフォン2Dゲーム開発講座 Cocos2d-x 3対応 (SMART GAME DEVELOPER) 株式会社TKS2 翔泳社 売り上げランキング : 7293 Amazonで詳しく見る |