cocos2d-xに慣れるために、基本的なことをコツコツコードを打ち込んでいます。 当たり前ですが、cococs2dと似ている部分がほとんどなんですが、そこはC++。色々とメンドクサイ&ややこしいことが多いので、エラーが出たり、上手く動かなかったり、webで調べても情報が少なかったりと大変です。
selfではなくて「this」
C++では、自身を表すのをselfではなく「thie」を使います。 [c] this->addChild(sprite);
this->scheduleUpdate();
this->setTouchEnabled(true);
//メソッドを呼び出す this->method();
[/c]
関数の定義
cocos2d-iPhoneの場合は、クラス内で利用する関数についてはヘッダーファイルの何も記述をしなかったんですが、cocos2d-xの場合は、ヘッダーファイルに記述をしないと利用できないみたいです。 [c] //ヘッダーファイル void method();
//cppファイル void HelloWorldLayer::method(){
}
[/c]
create()が便利
CCSpriteクラスやCCMenuItemImageクラスなど、クラスの初期化をする際に共通のクラスメソッドであるcreate()を使っているのですが、これ一つで色々できるので便利です。 ただし、独自のクラスを設定する際には、ヘッダーファイルにCREATE_FUNC(クラス名)をつけない利用できません。 [c] //ヘッダーファイル内 CREATE_FUNC(クラス名);
[/c]
using namespace cocos2d;
cppファイルの中に「using namespace cocos2d;」を付けないと、色々エラーが出る。 これを何のためにつけているかはわからないのですが、これがcocos2d-xでは必須のようです。
同じように「using namespace CocosDenshion;」というのがあるのですが、デンプレートで最初からあるHellwWorldScemeでは、エラーが出ていないのに、新しくCCSceneを作成した場合は、なぜか「using namespace CocosDenshion;」がエラーになる。 原因は不明。今のところ無くても大丈夫なのでそのままにしておく。
virtual
仮想関数と呼ばれているもので、ヘッダーファイルで定義する際につけるものがある。 でもタッチ操作でccTouchEndedの前につけても付けなくても、自分ので意義したメソッドが呼び出されているので、意味がるのかなと疑問に感じています。 C++の基礎 : 仮想関数virtual
タッチ操作の記述が難しかった
cocos2d-iPhoneとやっていることは、同じなんですが、cocos2d-xでは、中々上手くいきませんでした。 こんな感じのコードでタッチが反応しています。 [c] //ヘッダー void onEnter();
//virtualはあっても無くても反応は同じでした。 virtual bool ccTouchBegan(cocos2d::CCTouch pTouch, cocos2d::CCEvent pEvent); virtual void ccTouchEnded(cocos2d::CCTouch touches, cocos2d::CCEvent event); [/c]
[c] //cpp
//init this->setTouchEnabled(true);
void HelloWorld::onEnter(){
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
bool HelloWorld::ccTouchBegan(CCTouch pTouch, CCEvent pEvent){
return true;
}
void HelloWorld::ccTouchEnded(cocos2d::CCTouch ptouch, cocos2d::CCEvent event){
//タッチしたポイントにスプライトを移動
CCPoint point = this->convertTouchToNodeSpace(ptouch);
sprite->setPosition(point);
}
[/c]
Web上に有益な情報が今現在あまりなかったので実装するのに手間取りましたが、基本はcoocs2d-iPhoneと同じです。
さいごに
日本語の情報が少ないので、公式のドキュメントを見ながら、色々していますが、 時間はかかるかもしればいが、徐々にC++の書き方に慣れるしかないと思っています。 その中で、このサイトが結構分かりやすそうに感じました。 C++の基礎 : C++ の基本知識
まだまだC++ならではの技法がでてくると思いますので、理解するのを諦めないように頑張ります。