cocos2d-iPhone 2.x から3.0への移行 (v2 to v3)

cocos2d-xばかりで、cocos2d-iPhoneについてどこも書いてないので、メモしておきます。

参照元はこちら。
https://www.makegameswith.us/gamernews/359/cocos2d-30-a-brief-transition-guide

  • CCLayerがなくなった
  • タッチイベントの
  • CCMenueがなくなって、CCLayoutを使う

 

おっと、こちらに日本語で詳しく書かれていました。。。

http://the3rddevblog.blog.shinobi.jp/cocos2d%E3%83%A1%E3%83%A2/cocos2d%20v3%20-rc-%20%E3%82%92%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%8B%E3%82%89%E8%A6%B3%E5%AF%9F

【Cocos2d】Unknown register name ‘q0’ in asm というエラーが出た時

実機でテストしようとしたら以下の様なエラーが出てしまいました。

Unknown register name ‘q0’ in asm

そんなときの対処法。

__ARM_NEON__

↑このように書いてある箇所を↓のように変更します。

__ARM_NEON_7

mat4.cとneon_matrix_impl.cで1箇所ずつ書かれている箇所があるので、両方修正します。

参考元 : http://stackoverflow.com/questions/21510187/unknown-register-name-q0-in-asm

ghostlyIcons.は消して良いのか

GrandPerspective Mac

 

結論。消して良い。

以下を参考にしました。
http://stackoverflow.com/questions/16938659/can-i-safely-delete-the-contents-of-the-library-application-support-iphone-sim

現在、開発機にMacBookAirの128GBストレージのものを使っているのですが、容量的にカツカツになってきたのでいらないファイルの整理を行いました。

その中で、iPhoneシュミレーターのiOS6.1の一時ファイルと思われるディレクトリ「~/Library/Application Support/iPhone Simulator/6.1/tmp」の中身が1GB以上もファイルを持っており、容量を圧迫していることがわかりました。

ghostlyIcons.というのは見たことのないファイルなのでよくわからなかったのですが、リンク先によれば、tmpフォルダにあるものは基本的には削除して良いものだということです。

また、ghostlyIcons.自体がバグにより生成されたものなのではないかということも書いてありました。

というわけでghostlyIcons.のファイルを全部削除。
そもそもiOS6.1のシュミレーターは最近ほとんど使っていないので、なにか起きてもそれほど影響はないのですけどね。

GrandPerspective Macちなみにどのファイルやディレクトリが容量が大きいか、というのは、GrandPerspectiveというフリーソフトを使いました。

どのファイルがどれだけ容量を食っているのかを可視化してくれます。

Xcode5.1にしたら、cocos2dでエラーが出た

Xcode5.1にアップデートしたら、cocos2dで以下の様なエラーが出ました。

Redefinition of ‘__ccContentScaleFactor’ with a different type: ‘CGFloat’ (aka ‘double’) vs ‘float’

というわけでググったらこちらのページに解決法が載っていました。

http://www.cocos2d-iphone.org/forums/topic/redefinition-error-__cccontentscalefactor/

CCDirectorIOS.hの109行目です。

[objc]
// optimization. Should only be used to read it. Never to write it.
//extern CGFloat __ccContentScaleFactor; // CGFloatをfloatに修正
extern float __ccContentScaleFactor;
[/objc]

↑こんなかんじ。

同様に実装の方も修正。
CCDirectorIOS.mの66行目です。

[objc]
// CGFloat __ccContentScaleFactor = 1; // CGFloatをfloatに修正
float __ccContentScaleFactor = 1;
[/objc]

とりあえず動くようになりました。

デバッグ用にスロー再生する cocos2d

デバッグ用にスロー再生したいとき。

cocos2dのテンプレートで作成したプロジェクトのAppDelegate.mのapplication:didFinishLaunchingWithOptions:の最後の方に以下の一文を入れます。(return YES;の前。)

[objc]
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//【中略】

// 時間を5倍にする
[director_ scheduler].timeScale = 0.2;

return YES;
}
[/objc]

これで通常の5分の1のスロースピードで動きます。
timeScaleを2とかにすると、2倍の早さで動きます。

スプライトを、回転軸を指定して回転させる cocs2d

Cocos2d。先日の「Nodeを回転させる」の発展版。

デフォルトだとスプライトは中心に回転軸があるのですが、
これをずらしたい時の方法。

[objc]
// -45度まで回転させるCCRotateをつくる
CCRotate *rotateToMinus45 = [CCRotateTo actionWithDuration:0.2 angle:-45];

// スプライトの回転軸(中心点)を変更。ccp(0,0)だと左下、ccp(1,1)だと右上
hogeSprite.anchorPoint = ccp(0, 0);

// スプライトを回転させる
[hogeSprite runAction:rotateToMinus45];
[/objc]

中心軸(anchorPoint)を変更すると、回転軸も変わります。
中心軸は0~1で指定します。デフォルトは中心なのでccp(0.5,0.5)ですね。
中心軸を変更すると、それにともなって描画位置も変更されるので、座標の調整が必要です。

オナ禁カウンターが累計一万ダウンロードを達成しました

おかげさまで、オナ禁カウンターが全世界累計1万ダウンロードを達成いたしました。

ダウンロードをしてくださいました皆様、ありがとうございます。
引き続き、改良を進めてまいります。

これからも「オナ禁カウンター」をよろしくお願い致します。

Nodeを回転させる cocos2d

cocos2dでnode(スプライトなど)を回転させる方法。
CCRotateToだと、指定の角度まで。
CCRotateByだと、指定の角度だけ回転させる。

[objc]
// -45度まで回転させるCCRotateをつくる
CCRotate *rotateToMinus45 = [CCRotateTo actionWithDuration:0.2 angle:-45];

// スプライトを回転させる
[hogeSprite runAction:rotateToMinus45];
[/objc]

iPhone5, 5s用ペーパープロトタイプ用のPDFテンプレート A4サイズ

iOS7, iOS8用のiPhone5サイズのペーパープロトタイピングのテンプレートを作成しました。(2015/2/2 修正)

【ダウンロードはこちらから↓】

Aタイプ : iPhone_paper_prototype.pdf

Bタイプ : iPhone_paper_prototype_type_b.pdf

【Aタイプ】
画面3つ

iPhoneアプリ ペーパープロトタイピング
iPhoneアプリ ペーパープロトタイピング

 

【Bタイプ】

画面2つ、記入スペース有り

iPhoneアプリ ペーパープロトタイピング
iPhoneアプリ ペーパープロトタイピング

A4でプリントアウトすると、大体iPhoneと同じぐらいのサイズになります。

ここに書き込んだものをプロトタイプ用のアプリ「POP」で撮影して、画面遷移を見たりしています。

【ダウンロードはこちらから↓】

Aタイプ : iPhone_paper_prototype.pdf

Bタイプ : iPhone_paper_prototype_type_b.pdf

NSArrayにCGPointを格納する

NSArrayにはNSObjectしか入れられないので、CGPointも入りません。

ではどうするかというと、NSObjectにしてしまいます。

こんなかんじ。

[objc]
NSArray *array = @[[NSValue valueWithCGPoint:CGPointMake(700, 270)],[NSValue valueWithCGPoint:CGPointMake(800, 270)]];
[/objc]

値を取り出すときはこう。

[objc]
CGPoint cgPoint = [[array objectAtIndex:0] CGPointValue];
[/objc]