`Cocos2d-x v2` 移行ガイド(テキトー日本語訳)

Cocos2d-x | Cocos2d-x v20 migration guide を 2012/9/23 (Cocos2d-2.0-x-2.0.2 released の時) に翻訳した。英語よくわからんし、辞書もろくに見ない上に途中で読むのが面倒になったのでテキトーな翻訳なんでたぶんいろいろ間違ってます。Google翻訳神さまありがとうございました。

サマリー

このガイドは 2系 のバージョンが上がるたびに新しくなります。

  • API の変更
  • 新機能
  • OpenGL ES 2.0 に対応, OpenGL ES 1.1 はサポートから外れた
  • iOS, Android, win32 をサポート

cocos2d-iphone v2.0 と同様の変更

Cocos2d-xcocos2d-iphone を移植したものだから同様の変更があります。なのでprog_guide:migrate_to_v2.0 ? cocos2d for iPhoneの移行リストを見てください。

よく使うクラスやインタフェースの変更は以下のような感じです。

  • CCTransitionRadialCWCCTransitionProgressRadialCW にリネーム
  • CCTransitionRadialCCWCCTransitionProgressRadialCCW にリネーム
  • ARCH_OPTIMAL_PARTICLE_SYSTEMCCParticleSystemQuad と同等になる
    CCParticleSystemPointgles20 branch から削除したので使えない
  • CCMenuItemImage::initFromNormalImageinitWithNormalImage にリネーム
  • CCDirector::setDisplayFPS(bool)setDisplayStats(bool) にリネーム
  • CCAnimate::initWithDuration(ccTime duration, CCAnimation *pAnimation, bool bRestoreOriginalFrame) は削除されたので CCAnimation::setDelayPerUnit(float) を代わりに使ってください。
  • CCAnimate::actionWithDuration(ccTime duration, CCAnimation *pAnimation, bool bRestoreOriginalFrame) は削除されたので CCAnimation::setDelayPerUnit(float) を代わりに使ってください。
  • CCMotionStreak::streakWithFadeinitWithFade はパラメータが変更されたので CCMotionStreak.h を参照のこと。
  • CCLayerColor::layerWithColorWidthHeightlayerWithColor にリネーム
  • CCAnimation::setDelay(float) / getDelay() は次のようにリネームされた setDelayPerUnit(float)/getDelay()
  • CCAnimation::initWithFrames( CCMuatableArray* ) は次のようにリネームされた initWithSpriteFrames(CCArray*)
  • CCAnimation::addFrame(CCSpriteFrame*) は次のようにリネームされた addSpriteFrame(CCSpriteFrame*)
  • CCAnimation::animationWithFrames は次のようにリネームされた animationWithSpriteFrames
  • CCAnimation::addFrameWithFileName は次のようにリネームされた addSpriteFrameWithFileName
  • CCAnimation::addFrameWithTexture は次のようにリネームされた addSpriteFrameWithTexture
  • CCProgressTimer::initWithFile(char*) および initWithTexture(CCTexture2D*) は削除されたので、代わりに次のメソッドを使う initWithSprite(CCSprite*)
  • `CCProgressTimer::progressWithFile および progressWithTexture は削除されたので、代わりに progressWithSprite を使う
  • CCNode::get/setPositionInPixels, get/setAnchorPointInPixels, get/setContentSizeInPixels, boundingBoxInPixels() は削除された。代わりに inPixel のついてないプロパティを使う
  • CCParticleSystemQuad::initIndices()setupIndices() にリネーム
  • CCDirector::isRetinaDisplay() は死んだ。
  • CCRednerTexture::saveBuffer(...)saveToFile(...) に修正された。
  • bool CCSprite::isUsesBatchNode() は削除されたので、CCSpriteBatchNode* getSpriteBatchNode()NULLを返すかどうかで判定してください。
  • 重要! CCSprite::spriteWithBatchNode(...) は削除されたので、以下の用に変更してください sprite = CCSprite::spriteWithTexture(batchNode->getTexture(), CCRect*); batchNode->addChild(sprite)
  • CCSprite::initWithBatchNode(...), initWithBatchNodeInPixels(...) は削除されたので CCSprite::setBatchNode(...) を代わりに使ってください。
  • CCSprite::displayedFrame()displayFrame() にリネーム

Cocos2d-x 特有の変更

以下の様なものがあります。

CCDictionaryCCArray

1. CCMutableDictionary は非推奨となったワケ

gles20ブランチで CCMutableDictionaryCCMutableArray は非推奨となりました。CCDictionary および CCArray を代わりに使うべきです。

CCDictionaryUTHashにより実装されています。STLを利用して実装している古いCCMutableDictonaryと比較すると最低でも2倍は効率的です。

さらに CPP のテンプレートを使わなくなったので、スクリプトに簡単にバインドすることができます。

2. キータイプ

今のところ CCDictionarystd::stringint をサポートしています。 CCDictionary インスタンスはユニークなキータイプしかサポートしません。

CCDictionary の使い方

えー基本的には CCMutableDictionary と変わらないです。しかし begin, end, next などのイテレーションのメソッドは削除されました。代わりに CCDICT_FOREACH マクロを使用してください。このマクロは CCARRAY_FOREACH と同様に使えます。

CCMutableDictionary の場合

std::vector<std::string> keys = theDict->allKeys();
std::vector<std::string>::iterator it;
for (it = keys.begin(); it != keys.end(); it++ ) {
	std::string oneKey = *it;
	CCObjectSubClass* pSubClassObj = theDict->objectForKey(oneKey);
	// pSubClassポインタを利用して何らかの処理を行う
	
	
}

CCDictionary の場合

CCDictElement* pElement = NULL;
CCDICT_FOREACH(theDict, pElement) {
	CCObjectSubClass* pSubClassObj = (CCObjectSubClass*)pElement->getObject();
	// 現在のキーを取得できるけど、キーの型を自分で確認する必要がある。
	std::string oneStrKey = pElement->getStrKey(); // キーが std::string の場合
	// int oneIntKey = pelement->getIntKey(); // キーが int の場合
	// pSubClassポインタを利用して何らかの処理を行う
	
	
}

CCDictionary::allKeys メソッドはそのままにしてあるので CCMutableDictionary と同様にイテレーションできるますが、これはできる限り行わないことをおすすめします。

なぜなら全ての要素を走査するのに CCDICT_FOREACHCCARRAY_FOREACH よりもパフォーマンスが高いからです。

もし CCDictionaryLua で使う場合は CCDICT_FROEACH は使えず、従来の方法で行うことになります。

4. CCMutableArray が非推奨となったワケ

cocos2d-x 1.0.1 では CCArrayCCMutableArray があったが、この2つはユーザーを混乱させてしまいました。

さらに CCMutableArray, CCMutableDictionaryobjc のテンプレートとSTLが使われているというデメリットが存在します。

古い CCArray は逆方向からイテレーションできなかったので、CCARRAY_FOREACH_REVERSE を作成してこれを解決しました。

5. CCFileUtils::dictionaryWithContentsOfFile メソッドは

CCDictionary::dictionaryWithContentsOfFile に移動され、 CCArray::arrayWithContentsOfFile メソッドが加えられました。

CCControlExtension

Angus C さんが CCControllExtensioncocos2d-x に移植してくれました。

詳細は http://yannickloriot.com/2011/08/create-a-control-object-with-cocos2d-for-iphone/

タッチイベント

CCTouch#getID メソッドを追加しました。

このIDはマルチタッチにおいてどのタッチか判定するために使えます。

詳細は MultiTouchTest のテストプロジェクトを見てください。

CocosBuilder のサポート

gles20 ブランチから CocosBuilder をサポートするようになりました。

CCString

CCStringgles20ブランチで改良されました。

1. もっと便利なメソッド

    /* static 関数 */
    /** c string からCCString を作成
     - @return CCStringポインタが返されます。これは autorelease されます。
     */
    static CCString* stringWithCString(const char* pStr);

    /** Cのsprintfっぽいフォーマット関数。デフォルトのバッファサイズは (1024*100) バイト。
     - このバッファサイズを変更したい場合は CCString.cpp ファイルの kMaxStringLen マクロを変更してください。
     - @return A CCString pointer which is an autorelease object pointer,
     - it means that you needn't do a release operation unless you retain it.
     */ 
    static CCString* stringWithFormat(const char* format, ...);

    /** バイナリを文字列変換
     - @return A CCString pointer which is an autorelease object pointer,
     - it means that you needn't do a release operation unless you retain it.
     */
    static CCString* stringWithData(unsigned char* pData, unsigned long nLen);

    /** ファイルから文字列を作成 
     - @return A CCString pointer which is an autorelease object pointer,
     - it means that you needn't do a release operation unless you retain it.
     */
    static CCString* stringWithContentsOfFile(const char* pszFileName);

2. インターフェースの変更

  • toInt ---> intValue
  • toUint ---> uintValue
  • toDouble ---> doubleValue
  • toFloat ---> floatValue
  • toBool ---> boolValue
  • toStdStirng(非推奨)
  • getCString(Cの文字列を取得するための新しいAPI)

3. 便利なマクロ CCStringMake, ccs

#define CCStringMake(str) CCString::stringWithCString(str)
#define ccs               CCStringMake

CCStringMake, ccs マクロを使えば簡単に autorelease属性のついた CCStringインスタンスを生成できます。

これによてよりシンプルなコードを書くことができます。

CCArray *stringArray = CCArray::arrayWithObjects(
    ccs("Hello"),
    ccs("Variable"),
    ccs("Size"),
    ccs("!"),
    NULL);

CCDirectorFPS 表示のため CCLabelAtlas を使う

もし プロジェクトを 1.1 から 2.0 にアップデートする場合は、fps_images.pngResources/ に追加してプロジェクトに反映させなければなりません。

より読みやすく意味がわかりやすい名前に幾つかの関数が変更されました

翻訳する意味がほとんど無いので Cocos2d-x | Cocos2d-x v20 migration guide

Modify some function names to make them more readable and more meaningful」のところを見てください。

次の API changes in v2.0.2 も同様です。

翻訳終了

いろいろ直すのが面倒だなぁと思いつつも、いろいろと便利になってそうな印象ですね。

就職して時給6(検閲により削除されました)で忙しいのでなかなかアプリ開発できなさそうだけど、地道に学習していきたいなぁ。

Share
関連記事