cocos2d 1.0.1から2.0に移行する

Morveはcocos2d 1.0.1で開発したアプリですが、
せっかくcocos2d 2.0正式版がリリースされたので、2.0に移行してみます。

公式の移行手順は下記にあります。

cocos2d v2.0 migration guide – cocos2d for iPhone

移行手順

  1. cocos2d 2.0をダウンロードする
  2. 対象プロジェクトのcocos2dのソースファイルを置換する
    $ cd ~/my_game/libs/
    $ rm -rf cocos2d/
    $ rm -rf cocoslive/
    $ rm -rf CocosDenshion/
    $ rm -rf TouchJSON/
    $ rm -rf FontLabel/
    $ rm -f LICENSE*.txt
    $ cp -R ~/src/cocos2d-iphone-2.0/cocos2d/ .
    $ cp -R ~/src/cocos2d-iphone-2.0/external/ .
    $ cp -R ~/src/cocos2d-iphone-2.0/CocosDenshion/ .
    $ cp -R ~/src/cocos2d-iphone-2.0/cocos2d-framework/ .
    
  3. fps_images*.pngを置換する
    $ cd ~/my_game/Resources
    $ cp ~/src/cocos2d-iphone-2.0/Resources/Fonts/fps_images* .
    
  4. Xcodeプロジェクトからの参照を更新する
    既存のcocos2d 1.0.1ファイルへの参照を削除し、
    新たなcocos2d 2.0ファイルをドラッグ&ドロップする

基本的な移行は以上で終了です。
(MorveではKamcord SDKを使ってるので、そちらは別途cocos2d 2.0対応させます。)

さて、ここでビルドしてみましょう。

kazmath.hなど、kazmath関連のヘッダファイルが見つからない旨のエラーが出ました。
Kazmath Libraryは、3Dの数式演算ライブラリで、主にゲーム用途に利用されるもののようです。
cocos2d 1.0系では利用されていませんでしたが、
cocos2d 2.0から新たに導入されています。

エラーを見ると、どうもinclude配下ではなくsrc配下のファイルを探しに行ってしまってるようなので、
“Header Search Path”に下記のように追記します。(ダブルクォーテーションを忘れずに)

"${SRCROOT}/【プロジェクト名】/libs/external/kazmath/include"

再ビルドしてみましょう。

kazmath関連のエラーは出なくなりましたが、
AppDelegate.mとCCScrollLayer.m(cocos2d-extensionsのもの)にエラーが出ました。
これはcocos2d 1.0.1とcocos2d 2.0の間のAPI差分によるものと思われます。
面倒ですが、ひとつずつ潰していきましょう。

AppDelegate.m, AppDelegate.h, main.mの修正

まず、AppDelegate.m, AppDelegate.h, main.mについては
デフォルトで生成されるファイルがだいぶ異なってるので、
いったんテンプレートから作成したものをベースに、
現在のものとの差分を地道に反映させていくことにします。

cocos2d 2.0のテンプレートをインストールするには、下記のコマンドを実行します。

$ ./install-templates.sh -f
cocos2d-iphone template installer

Installing Xcode 4 cocos2d iOS template
----------------------------------------------------

...creating destination directory: /Users/moomindani/Library/Developer/Xcode/Templates/cocos2d v2.x/
...copying cocos2d files
...copying CocosDenshion files
...copying CocosDenshionExtras files
...copying Kazmath files
...copying template files
done!

Installing Xcode 4 Chipmunk iOS template
----------------------------------------------------

...copying Chipmunk files
done!

Installing Xcode 4 Box2d iOS template
----------------------------------------------------

...copying Box2d files
done!

Installing Xcode 4 CCNode file templates...
----------------------------------------------------

...creating destination directory: /Users/moomindani/Library/Developer/Xcode/Templates/File Templates/cocos2d v2.x/
done!

インストール完了後、Xcodeから新規プロジェクトを作成すると、
下記のようにcocos2d用のテンプレートが利用可能となります。

これをもとに、既存アプリのAppDelegate.m, AppDelegate.h, main.mを修正します。

不要なファイルの削除

RootViewController.h, RootViewController.m, GameConfig.hは不要なので削除します。

APIの変更に伴う修正

次に、cocos2d 2.0で変更されたAPIについて個別で修正していきます。

openGLView

CCDirectorからCCGLViewを取得するためのAPIが変更されています。

(修正前)

[[CCDirector sharedDirector] openGLView]

(修正後)

[[CCDirector sharedDirector] view]

itemFromString

CCMenuItemFontの初期化用のクラス関数であるitemFromString
cocos2d 2.0ではitemWithStringに変更されています。

(修正前)

CCMenuItemFont* label = [CCMenuItemFont itemFromString: @"test" target:self selector:@selector(func:)];

(修正後)

CCMenuItemFont* label = [CCMenuItemFont itemWithString: @"test" target:self selector:@selector(func:)];

itemFromNormalImage

CCMenuItemImageの初期化用のクラス関数であるitemFromNormalImage
cocos2d 2.0ではitemWithNormalImageに変更されています。

(修正前)

CCMenuItemSprite *sprite = [CCMenuItemImage itemFromNormalImage: @"test.png" selectedImage: @"test.png" target:self selector:@selector(func:)];

(修正後)

CCMenuItemSprite *sprite = [CCMenuItemImage itemWithNormalImage: @"test.png" selectedImage: @"test.png" target:self selector:@selector(func:)];

sharedDispatcher

sharedDispatcherもcocos2d 2.0では変更されています。

(修正前)

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

(修正後)

[[CCDirector sharedDirector] touchDispatcher];

ARCH_OPTIMAL_PARTICLE_SYSTEM

パーティクルシステムで、コンパイル時に
CCParticleSystemPointとCCParticleSystemQuadのうち、
ターゲットデバイスに最適なほうを自動指定するためのプリプロセッサ定義ARCH_OPTIMAL_PARTICLE_SYSTEMはcocos2d 2.0では削除されたため、
cocos2d 2.0 ではCCParticleSystemQuadに変更します。

(修正前)

CCParticleSystem* particle = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"particle.plist"];

(修正後)

CCParticleSystem* particle = [CCParticleSystemQuad particleWithFile:@"particle.plist"];

Morveではcocos2d-extensionsのCCScrollLayerを使ってるので、
cocos2d-extensionsのバージョンを0.11から0.21に上げます。
UIが若干変更され、綺麗になってます。

その他、「Apple Mach-O Linker (id)」などいろいろなエラーが出ましたが、
試行錯誤しながら各箇所修正して、ようやくビルドエラーを消せました。

ということで、Morve 1.3.0からはcocos2d 2.0ベースとなります。
cocos2d 2.0対応が完了しましたが、全体的に動作が軽快になったような印象です。
(計測してないので主観的なものです。)

  1. つい最近、「cocos2d For iPhoneレッスンノート」という本を購入したのですが、ヴァージョンが1.0.1当初のままで、最近cocos2dを2.0でダウンロードしてそのまま勉強していると様々なエラーがおこってしまい、半ば諦めかけていました。しかし、たまたまこの記事を見つけて、先ほど変更点を手直ししたところ、うまくいきました!ありがとうございます!
    今後の記事もとても期待しています!
    プログラミング超初心者なので、わからない事がまたたくさん出てくると思うので、今度質問させていただけたりしたら嬉しいなと思いますよろしくお願いします!
    では長文失礼いたしました。

  2. お返事が激しく遅くなってしまってごめんなさい。
    今後もcocos2d関連で役立つ記事を書けるように頑張ります!

    また不明点等ございましたらご連絡ください:)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。