devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

tagを指定してノードに追加しておけば、後からtagをキーにして取得することができます。

addChild時にタグを指定するか、

tagプロパティを指定しておくか。

取得するには、getChildByTag:メソッドを使う。

メモ:

  • 子は取得できるが、孫は無理。孫の親を指定して取得すれば可能。
  • 数値そのままだと、使い勝手が良くないのでenumで定数を定義しておく。

CCMenuItem, CCMenuを使って簡単なメニューを作成します。

メニュー項目が選択された際の処理方法として、

  • 別々のメソッドで処理する(最初から分岐)
  • 1つのメソッドで処理する(内部で分岐)

の2つが考えられます。

続きを読む

疑問:

cocos2dのテンプレートから作成したプロジェクトで、Supported Interface OrientationsをPortraitだけにしているにも関わらず、Achievementsから戻った時にiOSシミュレータがLandscapeになってしまう。


iOSシミュレータの設定(デバイス:iPhone, バージョン:5.1)

結論:

AppDelegate.mを修正する必要があります。

続きを読む

Objective-Cのメモリ管理が、なかなか理解できていません。

cocos2d-iphone2.0は「cocos2d is ARC compatible.」と書かれているものの、標準のテンプレートで作成したプロジェクトがARC対応になるわけじゃない。あとから手動でゴニョゴニョする必要がある模様。

疑問:

以下のCCSpriteのインスタンス(sprite)は、deallocでreleaseする必要があるのか?

解答:

libs/cocos2dの中のファイルCCSprite.mの、spriteWithFile:が書かれている部分を見てみました。

allocされて、initiWithFile:メソッドが呼ばれ、autoreleaseが指定されていました。
ということは…

APIのReferenceだけでなく、時にはソースを覗いてみるのも良いかもしれませんね。

AdmobをSingletonで実装しようとしていた時に、以下のページを見つけました。

Creating A GADBannerView Singleton in AdMob Applications

SingletonとはGoFのデザインパターンの1つで、
「1つのインスタンスのみ作成することが許された仕組み」
を実現する方法です(cocos2dのCCDirectorもこれ)。

この記事を参考にして、ゲームの状態を保存するクラスをSingletonパターンで作ってみました。

最初にsingletonメソッドが呼ばれた時にGameStatusクラスのインスタンスを作成し、staticな変数sharedに保存。
以後呼び出された時には、すでに作成済みの保存されているインスタンス(shared)が返される。

呼び出し方は、以下の様な感じ。

cocos2dで[CCDirector sharedDirector]と書くのと同じですね。

TexturePackerで使って作ったスプライトシートをcocos2dから使ってみました。

続きを読む

ShoeBoxではplist形式(cocos2d向け)のファイルを書き出せないため、TexturePackerを使ってスプライトシートを作ってみました。

TexturePacker

Code’n’Web : http://www.codeandweb.com/

続きを読む

乱数が必要なときは、srand()とtime()で乱数配列を初期化してからrand()で乱数を取得していました。
arc4random()を使えば、初期化不要で乱数を取得できるようです。

使用前

使用後