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だよなぁ…。