その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

cocos2dでテーブル表示

cocos2dとかopenFrameworksをiPhoneアプリで結構悩ましいのが、UIKitとの共存がどこまで可能なのかよくわからないところ。cocos2dはOpenGLベースだからうんぬんかんぬんみたいな。


今つくってるゲームアプリではUITableViewみたいなテーブルが必要なので、自前でつくる以外に方法があるのかないのか、調べてみました。

方法1. CCTableViewを使用する

http://www.cocos2d-iphone.org/archives/943
ダウンロードはこちらから


デモプロジェクトの形になっているので、どんなものか見てみるためにそのままビルドして実行してみると、



4つの画像が入ってる部分それぞれがCCTableViewを使用していて、縦に動いたり横に動いたり。



なんだかよくわからないレイアウトですがいくつかのCCTableViewで構成されていて、数字の列がスクロールします。


なんかUIKitのUITableViewに慣れてるとスクロールとバウンスの感じに違和感あります。ちょっとAndroidっぽいような?

CCUIViewWrapper を使用する

UITableView with cocos2d
http://stackoverflow.com/questions/515885/uitableview-with-cocos2d

You can very easily integrate UIViews with cocos2d scene by using CCUIViewWrapper class which was made by someone and posted on cocos2d fourm.

CCUIViewWrapperを使えば超簡単にcocos2dでUIViewを使えるぜ、とのことです。


http://d.hatena.ne.jp/Seasons/20100712/1278887859

CCSpriteを継承したCCUIViewWrapperクラスを書いた方がいます。
これは、内部でUIViewを保持しているので、AdmobやUITextFieldなどを
追加しておくことができます。


もちろんCCSpriteなのでaddChildで親に追加することもできますし、
親の影響をうけてUIViewがトランスフォームしてくれます。


UIViewの扱う事ができ、CCActionなども利用できる便利なラッパーです。

個人的見解

たぶんCCTableViewはOpenGLベースで実装されてるので、cocos2dプロジェクトで使うならCCTableViewを使う方が高速に動作すると思われます。
が、

  • CCTableViewはさわり心地に違和感がある
  • CCUIViewWrapperは慣れ親しんだUITableViewを使える

ってことで、でCCUIViewWrapper を使うことにしました。

CCUIViewWrapperの使い方

そんなCCUIViewWrapperクラスのソースはこちらです。
(ダウンロードではなく、フォーラムの一番上の発言内にソースが貼付けてあります)
http://www.cocos2d-iphone.org/forum/topic/6889


表示はこれだけ。

UIView *myView = [[[UIView alloc] init] autorelease];
CCUIViewWrapper *wrapper = [CCUIViewWrapper wrapperForUIView:myView];
wrapper.contentSize = CGSizeMake(320, 160);
wrapper.position = ccp(64,64);
[self addChild:wrapper];


そんなこんなで、実装してみたところ無事UITableViewが使え、もちろんMKMapViewも使えました。