2014年2月28日金曜日

cocos2dのpopSceneの注意点

pushSceneでシーンをプッシュし、popSceneでシーンを破棄するときに呼び出し元のシーンのonEnterが呼ばれるので注意すること。

2014年2月27日木曜日

cocos2d:CCLineBreakModeがdeprecated

CCLineBreakModeがdeprecatedの場合、頭にkをつける


CCLineBreakModeWordWrap → kCCLineBreakModeWordWrap
CCLineBreakModeCharacterWrap → kCCLineBreakModeCharacterWrap

cocos2d:CCTextAlignmentがdeprecated

CCTextAlignmentの値がdeprecatedの場合、頭にkをつける。


CCTextAlignmentCenter → kCCTextAlignmentCenter
CCTextAlignmentLeft → kCCTextAlignmentLeft
CCTextAlignmentRight → kCCTextAlignmentRight

Inkscapeで矢印の先の色を変える

メニューから以下のように選択


「エクステンション」→「パスの変形」→「マーカーの色をパスに合わせる」

2014年2月26日水曜日

cocos2dでメニューに画像を使う

CCMenuItemSpriteを使用する


//選択前のボタン
CCSprite *nomalButton = [CCSprite spriteWithFile:@"button.png"];

//選択後のボタン(色を暗くした同じ画像)
CCSprite *selectedButton = [CCSprite spriteWithFile:@"button.png"];
selectedButton.color = ccc3(64, 64, 64);
    
CCMenuItemSprite *item = [CCMenuItemSprite itemWithNormalSprite:nomalButton selectedSprite:selectedButton target:self selector:@selector(tapButton)];
CCMenu* menu = [CCMenu menuWithItems:item, nil];
[self addChild:menu];

2014年2月25日火曜日

objective-cで数値と文字列の変換

objective-cで数値と文字列の変換


文字列から数値


int tempInt = [tempString intValue];


数値から文字列


NSString *tempString = [NSString stringWithFormat:@"%d", tempInt];

NSDictionaryのキーの存在確認

NSDictionaryのキーの存在確認


標準では確認できるメソッドが無いので以下のようにする

if ([[dictionary allKeys] containsObject:key) {
  // 存在する場合の処理
}

2014年2月24日月曜日

cocos2dでAppDelegateの取得

cocos2dでAppDelegateの取得


AppController *appDelegate = (AppController *)[[UIApplication sharedApplication] delegate];

2014年2月21日金曜日

cocos2dでポーズの実装と注意点

cocos2dでポーズの実装と注意点


ポーズと解除


//ポーズ
[[CCDirector sharedDirector] pause];

//ポーズ解除
[[CCDirector sharedDirector] resume];


注意点


1.ホームボタンでのポーズ

AppDelegateの以下のメソッドにもpause,resumeが書かれている。
  • applicationWillResignActive
  • applicationDidBecomeActive
これはホームボタンが押されたときに呼ばれる。
これらのメソッドが呼ばれても問題ないようにフラグ等を追加して制御する必要がある。

2.タッチメソッド

ポーズ中でもタッチ機能は生きているので別途無効化する必要がある。

2014年2月20日木曜日

NSUserDefaults

ちょっとしたデータを保存する場合、NSUserDefaultsが便利


NSUserDefaultsの使い方


//取得時のキー
NSString *key = @"key";
//保存する文字列
NSString *dataString = @"data";

//保存
NSArray *tempArray = [NSArray arrayWithObject:dataString];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:tempArray forKey:key];
[defaults synchronize];


//保存したデータの取得用
NSString *saveString = nil;

//取得
NSArray *array = nil;
array = [[NSUserDefaults standardUserDefaults] arrayForKey:key];
if (array != nil) {
    for (NSString *data in array) {
        saveString =  data ;
    }
}

2014年2月19日水曜日

cocos2dで複数のアクションを同時実行

cocos2dで複数のアクションを同時実行する方法


CCSpawnを使用


id fadeIn = [CCFadeIn actionWithDuration:1.0];
id jump = [CCJumpBy actionWithDuration:1.0 position:ccp(0, 50) height:50 jumps:1];
id spawn = [CCSpawn actions:fadeIn, jump, nil];
[sprite runAction:spawn];

2014年2月18日火曜日

cocos2dでスクロールするレイヤー

Cocos2d「Extensions」を使用してスクロールするレイヤーを実装


ダウンロード



Xcodeに追加

ZIPのExtensions->CCScrollLayerをフォルダごと追加


インポート


#import "CCScrollLayer.h"


初期設定


- (id) init {
 if ((self = [super init])){
  // シーンを複数作成
  NSMutableArray *layerArray = [NSMutableArray array];
  CCLayer* layer1 = [CCLayer node];
  CCLayer* layer2 = [CCLayer node];
  CCLayer* layer3 = [CCLayer node];
  
  [layerArray addObject:layer1];
  [layerArray addObject:layer2];
  [layerArray addObject:layer3];
  
  // CCScrollLayerに追加
  CCScrollLayer *scroller = [[CCScrollLayer alloc] initWithLayers:layerArray widthOffset: 0];

  //ページインジケーターのポジション
  scroller.pagesIndicatorPosition = ccp(self.contentSize.width / 2, 60);
  [self addChild:scroller];
 }
}

2014年2月17日月曜日

レビューを促すライブラリ『Appirater』

レビューを促すAppiraterの導入手順


1.ダウンロード

 githubから、Appiraterをダウンロードする。
https://github.com/arashpayan/appirater

2.プロジェクトに追加

 ダウンロードしたappirater-masterをプロジェクトに追加。

3.不要なファイルの削除

 README.mdは不要なので削除。

4.フレームワークの追加

 プロジェクトにCFNetwork.framework、SystemConfiguration.framework、StoreKit.frameworkを追加する。

5.ローカライズ

 レビューを催促するときに表示される文言を修正する場合は、ローカライズファイルを修正する。
日本語の場合は、AppiraterLocalizable.strings(Japanese)

6.ARC設定

 プロジェクトがARCを利用しない場合、TARGETSの Build Phases ≫ Compile Sources sectionを開き、Appirater.mに -fobjc-arc を設定する。

7.インポート

 AppDelegate.hを修正する。
#import "Appirater.h"


8.設定値の修正

 AppDelegate.mのapplication:didFinishLaunchingWithOptionsメソッドにAppirater起動の設定を記述する。古いプロジェクトの場合はapplicationDidFinishLaunchingでもよい。
[Appirater setAppId:@"000000000"]; // Apple ID(アプリ毎の識別番号:iTunes Connectで参照可)
[Appirater setDaysUntilPrompt: 30]; // 同じバージョンで再びメッセージを表示するまでの日数。(デフォルト:30日)
[Appirater setUsesUntilPrompt: 20]; // 同じバージョンで再びメッセージを表示するまでの起動回数。(デフォルト:20回)
[Appirater setSignificantEventsUntilPrompt: -1]; // ゲームのレベルクリアなど、ユーザーがアプリ内で何か特別な操作したときや、あるレベルに達したときにメッセージを表示するか否かを指定する。(デフォルト:-1)
// 値 : -1=無効, 1=有効
// 表示する場合は、ゲームのレベルクリアしたときなど任意の箇所に [Appirater userDidSignificantEvent:YES] を記述する。
[Appirater setTimeBeforeReminding: 1]; // 「後で見る」を選択したときに再びメッセージを表示するまでの日数。(デフォルト:1日)
[Appirater setDebug: NO]; // デバッグモードの設定。YESにするとアプリを起動するたびに表示される。(デフォルト:NO)
[Appirater appLaunched:YES]; // Appiraterの起動


9. 起動時のカウント

AppDelegate.mのapplicationWillEnterForegroundメソッドに、フォアグランド時にカウントするかの設定を記述する。
[Appirater appEnteredForeground:YES];


10.アプリ名

 実行時の画面に表示するアプリ名を変更する場合は、Appirater.hを修正する。
#define APPIRATER_APP_NAME を修正


2014年2月14日金曜日

cocos2dでのスケジューラーの使い方

//スタート
[[[CCDirector sharedDirector] scheduler] scheduleSelector:@selector(hoge) forTarget:self interval:0.5 paused:NO];

//ストップ
[[[CCDirector sharedDirector] scheduler] unscheduleSelector:@selector(hoge) forTarget:self];

//ポーズ
[[[CCDirector sharedDirector] scheduler] pauseTarget:self];

//ポーズ解除
[[[CCDirector sharedDirector] scheduler] resumeTarget:self];

2014年2月13日木曜日

2本目以降のアプリを申請するときのメモ

Provisioning Profiles(Distribution用)取得

※App IDは先に作っておく

iOS Dev CenterでCertificates, Identifiers & Profiles→Certificates
Distribution→App Store
App ID→そのアプリ用に作ったやつ

出来上がったものをダウンロード→ダブルクリック


2014年2月12日水曜日

Validate時に120x120アイコンの警告がでる

XcodeでArchive→Validateをしたときに「120x120」のアイコンに関するワーニングがでた。

120x120のアイコンは「Icon-120.png」で作っていたがどうも変わったらしい(iOS7対応?)
「Icon@2x.png」に変えたら無事にValidateを通過。

前は114×114が「Icon@2x.png」だったはずなのに変わったようだ。
じゃあ、「114×114」のアイコンは不要ってことだろうか。
なんだか納得がいかない。