cocos2d-xをC++で書いた場合とjavascriptで書いた場合のコード記述量比較例

cocos2d-x、練習のために同じプログラムをC++javascript bindingを使って書いています。

JSだと書くコード量減るなぁ…と実感したのでメモしてみます。cocosbuilderで定義されたCCLabelTTF変数(仮にlabelTextという変数名とする)にアクセスするのに必要なコードを比較。ccbiファイルを呼び出すところはそれほど変わらないので省略。
まずはJS側から。

var GameLayer = function(){};

GameLayer.prototype.onDidLoadFromCCB = function () {
    cc.log(this.labelText);
}
JSの場合これだけ!次にC++の場合。
// コンストラクタ
GameLayer::GameLayer()
: mScore(NULL)
{}

// デストラクタ
GameLayer::~GameLayer()
{
    CC_SAFE_RELEASE(mScore);
}

// 変数アクセス
bool GameLayer::onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode)
{
    CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "labelText", CCLabelTTF*, this->labelText);
    CC.Log(this->labelText);
    return false;
}
これはcppファイルの中身だけで、ヘッダーファイルも書かねばなりません。
#include "cocos2d.h"
#include "cocos-ext.h"

class GameLayer : public CCLayer
, public CCBMemberVariableAssigner
{
    CCLabelTTF* mScore;
    virtual bool onAssignCCBMemberVariable(CCObject* pTarget, const char* pMemberVariableName, CCNode* pNode);

public:
    GameLayer();
    virtual ~GameLayer();

    CCB_STATIC_NEW_AUTORELEASE_OBJECT_WITH_INIT_METHOD(GameLayer, create);
};
初期化やデストラクタ、cocosbuilderとcocos2d-xの変数の紐付けも記述する必要がある。JSB(javascript binding)はまだ関数の一部が使えなかったりBox2dもサポートされてなかったりと発展途上ですけど、さくっと作るならやっぱJSBだよなぁ…。