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も使えました。