CCMenuItem, CCMenuを使って簡単なメニューを作成します。
メニュー項目が選択された際の処理方法として、
- 別々のメソッドで処理する(最初から分岐)
- 1つのメソッドで処理する(内部で分岐)
の2つが考えられます。
プログラミングやテクニカルな内容の覚え書き。
CCMenuItem, CCMenuを使って簡単なメニューを作成します。
メニュー項目が選択された際の処理方法として、
の2つが考えられます。
2012/11/29
category: cocos2d | tag: cocos2d, Objective-C | no comments
2012/11/27
category: cocos2d | tag: cocos2d, Objective-C | no comments
Objective-Cのメモリ管理が、なかなか理解できていません。
cocos2d-iphone2.0は「cocos2d is ARC compatible.」と書かれているものの、標準のテンプレートで作成したプロジェクトがARC対応になるわけじゃない。あとから手動でゴニョゴニョする必要がある模様。
以下のCCSpriteのインスタンス(sprite)は、deallocでreleaseする必要があるのか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@implementation SceneTitle { CCSprite *sprite; } - (id) init { if (self = [super init]) { sprite = [CCSprite spriteWithFile:@"Icon@2x.png"]; [sprite setPosition:ccp(160, 300)]; [self addChild:sprite]; } return self; } - (void) dealloc { [super dealloc]; } @end |
libs/cocos2dの中のファイルCCSprite.mの、spriteWithFile:が書かれている部分を見てみました。
1 2 3 4 |
+(id)spriteWithFile:(NSString*)filename { return [[[self alloc] initWithFile:filename] autorelease]; } |
allocされて、initiWithFile:メソッドが呼ばれ、autoreleaseが指定されていました。
ということは…
APIのReferenceだけでなく、時にはソースを覗いてみるのも良いかもしれませんね。
2012/11/26
category: Objective-C | tag: AdMob, Objective-C | no comments
AdmobをSingletonで実装しようとしていた時に、以下のページを見つけました。
Creating A GADBannerView Singleton in AdMob Applications
SingletonとはGoFのデザインパターンの1つで、
「1つのインスタンスのみ作成することが許された仕組み」
を実現する方法です(cocos2dのCCDirectorもこれ)。
この記事を参考にして、ゲームの状態を保存するクラスをSingletonパターンで作ってみました。
1 2 3 4 5 6 7 8 |
@interface GameStatus : NSObject @property (nonatomic, assign) NSUInteger score; + (GameStatus *)singleton; - (void) resetScore; @end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@implementation GameStatus @synthesize score = _score; + (GameStatus *)singleton { static GameStatus *shared; static dispatch_once_t pred; dispatch_once(&pred, ^{ shared = [[GameStatus alloc] init]; }); return shared; } - (id) init { if (self = [super init]) { [self resetScore]; } return self; } - (void) resetScore { _score = 0; } @end |
最初にsingletonメソッドが呼ばれた時にGameStatusクラスのインスタンスを作成し、staticな変数sharedに保存。
以後呼び出された時には、すでに作成済みの保存されているインスタンス(shared)が返される。
呼び出し方は、以下の様な感じ。
1 2 3 |
NSUInteger sco = [GameStatus singleton].score; [[GameStatus singleton] resetScore]; |
cocos2dで[CCDirector sharedDirector]と書くのと同じですね。
ShoeBoxではplist形式(cocos2d向け)のファイルを書き出せないため、TexturePackerを使ってスプライトシートを作ってみました。
Code’n’Web : http://www.codeandweb.com/
乱数が必要なときは、srand()とtime()で乱数配列を初期化してからrand()で乱数を取得していました。
arc4random()を使えば、初期化不要で乱数を取得できるようです。
1 2 |
srand(time(nil)); int randomNumber = rand() % MAX_NUMBER + 1; |
1 |
int randomNumber = arc4random() % MAX_NUMBER + 1; |
実アプリを想定し、2つのシーン切り替えと合わせてUITableViewを実装してみました。
初めてUITableViewを使ってみましたが、あまりのカスタマイズの自由度の高さに驚きました。UIKit全般に言えますが、知れば知るほど良くできていることが分かってきます。
一旦、UITableViewの追加と削除、スクロールの強制停止に関してメモしておきます。