今回はcocos2d-xの便利なマクロについて紹介したいと思います。
マクロとは置き換え機能のことで、例えば
XXを洗う。
XXを切る。
XXを皿に盛る。
という3工程があったときに、ソースコードだったら毎回この3行を書くのってめんどくさいですよね。
そこでこれってXXの部分だけわかれば置き換えるだけじゃんという具合になるわけです。
なのでこれをマクロにするときにはこんな感じにします。※イメージ
MAKE_SALAD(XX){
WASH(XX);
SLICE(XX);
SET(XX);
}
こうすればソースコードで書くときにはMAKE_SALAD(TOMATO)のようにするだけで3工程行われますし、1行で済むので生産性が高まります。cocos2d-xではそのようなマクロが数多く存在します、今回はその中でよく使うであろう便利なものについて紹介します。
最後に9.のCC_SYNTHESIZEというマクロの実装例を紹介して終わりたいと思います。
まずセッタとはメンバ変数に値をセットする関数のことでゲッタとはメンバ変数を返すだけの関数です。
まずは例としてCC_SYNTHESIZEを使わない実装を見せます。
class Player { public: //セッタ void setHP(int h){ hp=h; } //ゲッタ int getHP(void){ return hp; } protected: //メンバ変数 int hp; };
オブジェクト指向プログラミングでは保守性や独立性を重視するのでメンバ1つに対してこのようにゲッタセッタを設けるのは当たり前の光景です、しかしコーディングする側からするとメンバ変数の数だけ作らなければいけないということで手打ちでやるのは結構大変です。ですので、この作業をなくすためにCC_SYNTHESIZEを利用した実装がこちらになります。
class Player { public: //メンバとセッタゲッタを自動生成 CC_SYNTHESIZE(int, hp, HP); };
どうでしょう、これら2つはまったく同じ意味のコードです。オブジェクト指向はマクロをばんばん利用していこうという考えではないのですが、生産性の観点からするとマクロを利用した方が断然いいですよね。なのでこのように利用できる場面があったら是非使ってみてください。