COCOS道場DX
ホームに戻る
スポンサーリンク

便利なマクロを利用する


今回はcocos2d-xの便利なマクロについて紹介したいと思います。
マクロとは置き換え機能のことで、例えば

XXを洗う。
XXを切る。
XXを皿に盛る。

という3工程があったときに、ソースコードだったら毎回この3行を書くのってめんどくさいですよね。
そこでこれってXXの部分だけわかれば置き換えるだけじゃんという具合になるわけです。
なのでこれをマクロにするときにはこんな感じにします。※イメージ

MAKE_SALAD(XX){
WASH(XX);
SLICE(XX);
SET(XX);
}

こうすればソースコードで書くときにはMAKE_SALAD(TOMATO)のようにするだけで3工程行われますし、1行で済むので生産性が高まります。cocos2d-xではそのようなマクロが数多く存在します、今回はその中でよく使うであろう便利なものについて紹介します。

1. SWAP(x,y,type)

XとYの内容を交換する、typeには型を指定

2. CCLOG(format,...)

デバッグモードの時のも動くprintf

3. CREATE_FUNC(className)

自動でautorelease属性を付加しインスタンスへのポインタを返すcreate関数を作成

4. CC_SAFE_DELETE(p)

NULLチェック機能付きdelete

5. CC_SAFE_DELETE_ARRAY(p)

4.の配列バージョン

6. CC_SAFE_RELEASE(p)

NULLチェック機能付きrelease

7. CC_SAFE_RELEASE_NULL(p)

6.の作業後にNULLを代入する処理付き

8. CC_SAFE_RETAIN(p)

NULLチェック機能付きretain

9. CC_SYNTHESIZE(varType,varName,funName)

varType型のvarNameという変数をprotectedでメンバに生成し,set[funName],get[funName]というpublicのセッタゲッタを自動生成してくれる

10. CC_SYNTHESIZE_READONLY(varType,varName,funName)

9.のセッタは生成しないバージョン

最後に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つはまったく同じ意味のコードです。オブジェクト指向はマクロをばんばん利用していこうという考えではないのですが、生産性の観点からするとマクロを利用した方が断然いいですよね。なのでこのように利用できる場面があったら是非使ってみてください。

スポンサーリンク
このエントリーをはてなブックマークに追加
前の章へ ホームに戻る 次の章へ