FC2ブログ

Entries

cocos2d 動作:構成を日本語訳の巻

今回は、動作を構成する方法について読み進めてみましょう。

いろんな動作を組み合わせてすごいキャラのアクションが作れそうです。

----------------------------
<目次
動作の構成

動作を構成可能なアクションもあります。

・連続動作
・Spawn 動作
・繰り返動作
・永久ループ動作

CCSequence アクションは、動作のリストです。

アクションは定義した順番で実行されます。

例:
id action1 = [CCMoveTo actionWithDuration:2 position:ccp(100,100)];
id action2 = [CCMoveBy actionWithDuration:2 position: ccp(80,80)];
id action3 = [CCMoveBy actionWithDuration:2 position: ccp(0,80)];
[sprite runAction: [CCSequence actions:action1, action2, action3, nil]];


action1 が最初に実行されます。

action1 の実行が終了すると、action2 が実行されます。 そして、action2 が終了した時に action3 が実行されます。

注意:限られた実行時間が定義されたアクションを指定してください。(たとえば、CCRepeatForever は、CCSequence に指定できません。)

Spawn

CCSpawn 動作を使用すると、いちどに複数のアクションを実行できます。

CCSpawn の実行時間は、サブアクションの中で一番長い実行時間となります。

id action = [CCSpawn actions:
[CCJumpBy actionWithDuration:2 position:ccp(300,0) height:50 jumps:4],
[CCRotateBy actionWithDuration: 2 angle: 720],
nil];
 
[sprite runAction:action];


繰り返し

CCRepeat アクションでは、決まった時間動作を繰り返すことができます。

例:
id a1 = [CCMoveBy actionWithDuration:1 position:ccp(150,0)];
id action1 = [CCRepeat actionWithAction:
[CCSequence actions: [CCPlace actionWithPosition:ccp(60,60)], a1, nil]
times:3];
[sprite runAction:action1];


永久ループ

CCRepeatForever アクションは特別なアクションです。

永久に動作を繰り返すので、期間の指定はできません。

例:
id a1 = [CCMoveBy actionWithDuration:1 position:ccp(150,0)];
id action2 = [CCRepeatForever actionWithAction:
[CCSequence actions: [[a1 copy] autorelease], [a1 reverse], nil]
];
[sprite runAction:action2];


注意:
CCRepeatForever は有効な CCIntervalAction ではありません。ゆえに、CCSequence で CCRepeatForever の使用はできません。

-------------------------

Spawn はいろんな動作を組み合わせられるようですね。

ジャンプしながら回転とかを簡単に実現できそうです。

はやくつかってみたいですね。

では次に進みましょう。
スポンサーサイト



スポンサード リンク

cocos2d プログラミングガイドレッスン2を実践してみるの巻

cocos2d のプログラミングガイド レッスン2をもとに、スプライトを作って移動させてみます。

まずは、テンプレートプロジェクトを作成します。

Xcode 4.5.2 を立ち上げて、

File → New → Project で、Choose a template for your new project

って画面が出るから、iOS の cocos2d v2.x を選ぶと下のような画面になります。

※まだ、cocos2d のテンプレートを入れてない場合は、レッスン1 の 「3.プロジェクトテンプレートのインストール」をみながらインストールしてみましょう。

201301230001.png

テンプレートは3種類あって、

・cocos2d iOS
・cocos2d iOS with Box2d
・cocos2d iOS with Chipmunk

です。with 以降でなにか違いがあるみたいですね。

まずは、何も付いていないのでプロジェクトを作ってみます。

他のやつは、後ほど違いを見るために作ってみますね。

まずは、 cocos2d iOS を選んで、Next をクリックすると、プロジェクト情報を入力する画面が出てくるので、

201301230002.png

適当に入力して Next。

201301230003.png

保存先のフォルダを選んで Next。

201301230004.png

そしたら、プロジェクトが出来上がります。

レッスン2のとおり、HelloWorldLayer と AppDelegate のファイルが出来上がってます。

HelloWorldLayer.m を プロジェクトナビゲータで選択して表示させます。

そしたら、#import の行の下に、以下の2行を加えます。

CCSprite *seeker1;
CCSprite *cocosGuy;

それぞれのスプライトのポインタの定義ですね。

201301230005_20130123193639.png

おっと、スプライト用のファイルを追加するのを忘れていました。

まずは、Finder で、プロジェクトの Resources の直下に以下のファイルを保存します。

201301230006.png

ここはやっぱりちかんくんですね。

chikan.png
※著作権は放棄しませんが、ご自由にお使いください。

そしたら、Xcode に戻って、プロジェクトナビゲータの Resources フォルダにドラッグアンドドロップだ。

ダイアログが開くから、

201301230007.png

Finish をクリックして追加しよう。そしてら、プロジェクトナビゲータに追加されてます。

201301230008.png



つぎは、init メソッドにスプライトを構築するコードを追加するんだったな。

init メソッドの if 文の中をまずは全部削除して、そこに以下のコードを追加だ!

// seeker スプライトを構築して初期化し、レイヤーに追加
seeker1 = [CCSprite spriteWithFile: @"chikan.png"];
seeker1.position = ccp( 50, 100 );
[self addChild:seeker1];

// cocos2d 野郎も同様に。アプリのアイコンを再利用だ
cocosGuy = [CCSprite spriteWithFile: @"Icon.png"];
cocosGuy.position = ccp( 200, 300 );
[self addChild:cocosGuy];

201301230009.png

ここで、 Run をクリックして実行してみましょう。

201301230010.png

レッスン通り、表示されましたね。

ちかん君を真ん中に表示してみましょう。

X座標を 50 → 240 に変更して実行してみます。

201301270001.png

おー!!真ん中辺りに動いたぁ!

201301270002.png


いや、簡単ですねぇ。

次は、スプライトを動かしていきます。

まずは定期的に呼び出されるメソッドを定義してそのなかでスプライトを動作させてみましょう。

init メソッドでスケジュールを定義してみます。

201301270003.png

レッスン通り、cocosGuy を 追加した次の行で、メソッドをスケジューリングしてみます。

次は、スケジューリングしたメソッドを定義します。

201301270004.png

とりあえず、そのまま実行してみます。

201301270005.png

おー!ちかん君が動き始めた。すごいすごい。

1値秒間に動かしたいピクセル数に dt をかけると、速さが指定できるんでしたよね。なので、

100 → 400 にスピードアップさせてみたいと思います。

201301270006.png

実行してみます。



 はやくなったー!!!

一秒間に400ピクセルだから、左から右まで一秒強で移動していることになりますね。

この指定は何気に便利ですね。

従来だと、早い、普通、ゆっくりだと、フレームごとに加算するピクセルを変えて調整していたのですが

これは、速さで指定ができるのでイメージがしやすいです。

次はタッチ、タッチ、ここにタッチ!

最近休日出勤が多くてテンション上がりまくりです!

レッスンでは、targeted デリゲートなるものが登場してますね。

詳しくは、タッチと入力を日本語訳の巻 を参照くださいな。

まずは、ヘッダを定義してっと、

レッスンには、 HelloWorldScreen.h の真下って書いてあるけれど、

そんなモノが見つからないので、このあたりに書きます。

201301280001.png

そしたら、タッチイベントの登録と、targeted デリゲートの有効化を行います。

201301280002.png

CCDirector が管理する touchDispatcher の デリゲートに self を指定しているようです。

そして、isTouchEnabled を YES にして有効化してます。

たったこれだけで、タッチデリゲートの設定が終わるんですね。

そして、後は、デリゲート用のメソッドを書けば、タッチ、タッチ、あそこにタッチ!

なのですね。

201301280003.png

タッチしたら、一秒でその場所に cocosGuy が移動してくるそうです。

じっちゃんオラワクワクしてきた!

よし、起動してみるぞ。



わー、近寄ってきたー!!

これはかなりシュールなシチュエーションですね。

ちかん君は、我関せず横移動を永遠に続け、ココス君は、タッチしたところに寄ってくる。

楽ちんで簡単でした。

プロジェクト作成から、タッチイベントへの応答まであっという間に出来ました。

いろいろと応用できそうですね。

次回は、レッスン3を実際にやってみたいと思います。
スポンサード リンク

cocos2d 基本動作 を日本語訳の巻

基礎的なことも理解できて、いよいよ本格的な解説が始まりますね。

気合いれて行きましょう。

----------------------
<目次
基本動作

動作(Actions)

動作(Actions)

動作(Actions)は CCNode オブジェクトに与えられた命令群のようなものです。

これらの動作は通常、オブジェクトのいくつかの属性、例えば、位置、回転、サイズなどを変更します。

一定期間毎に属性を変更したいのであれば、CCInstantAction アクションではなく、CCIntervalAction アクションを使用します。

たとえば、CCMoveBy は CCIntervalAction のサブクラスなので、一定期間毎に正確に位置を変更します。

例:
# 2秒間で、スプライトを右に 50 ピクセル動かし、10 ピクセル上に動かします
[sprite runAction: [CCMoveBy actionWithDuration:2 position:ccp(50,10)]];


CCIntervalAction アクションにはいくつかの注目すべき性質があります。

時間変化アクションによって加減速することが可能です。

CCEaseIn
CCEaseOut
CCEaseInOut
CCSpeed
Etc. (さらなる情報は、 ActionsEaseTest.m を参照してください。)

全ての By で終了する相対的なアクションと、いくつかの Toで終了する絶対的なアクションは、反転というアクション ([action reverse]) を持ち、動作を反対向きにします。

CCActionManager を使用することで、全ての動作の中止と再開が可能です。

# Pause actions
[[CCActionManager sharedManager ] pauseAllActionsForTarget:sprite ] ;
 
# resume actions
[[CCActionManager sharedManager ] resumeAllActionsForTarget:sprite ] ;


基本動作

基本的なアクションは下記のような基本的な性質を変更します。

位置
・CCMoveBy
・CCMoveTo
・CCJumpBy
・CCJumpTo
・CCBezierBy
・CCBezierTo
・CCPlace

サイズ
・CCScaleBy
・CCScaleTo

回転
・CCRotateBy
・CCRotateTo

視覚
・CCShow
・CCHide
・CCBlink
・CCToggleVisibility

透過
・CCFadeIn
・CCFadeOut
・CCFadeTo

RGB
・CCTintBy
・CCTintTo

例:
CGSize s = [[CCDirector sharedDirector] winSize];
 
id actionTo = [CCMoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height-40)];
id actionBy = [CCMoveBy actionWithDuration:2 position: ccp(80,80)];
 
[sprite1 runAction: actionTo];
[sprite2 runAction:actionBy];


反転動作

ほとんど全てのアクションは反転用のメソッドが実装されています。

そのメソッドは基本的に、逆の振る舞いをする新しいアクションを構築します。

例:
id move = [CCMoveBy actionWithDuration:2  position: ccp(80,80)];
 
id move_reverse = [move reverse];



move_reverse アクションは期間が 2 で、位置が ccp(-80,-80) の CCMoveBy アクションとなります。

-------------------------

なんやら、いろんな動作用のクラスがあるってことみたいですね。

実際に使ってみないとどのようになるかよくわかりません。

後ほど実際に使ってみますのでお楽しみに。

スポンサード リンク

cocos2d タッチと入力を日本語訳の巻

iPhoneの2Dゲーム開発用ライブラリ cocos2d の基本コンセプトである入力とタッチを日本語訳しながら読んでいきます。

普通のタッチイベントとは違う Targeted なイベントというものがあるようです。

わざわざ定義してあるくらいだから、きっととても有効に使えるものなのだろうと期待して読み進めていきたいと思います。

----------------------------
<目次
基本コンセプト
cocos2d タッチと入力

cocos2d ではタッチイベントをハンドリングする方法として2つの異なる方法が提供されています。

それらの方法は、異なる2つのデリゲートの種類で定義されます。(この二つは CCTouchDelegateProtocol.h で定義されています。)

標準の(standard)タッチデリゲート

@protocol CCStandardTouchDelegate 
@optional
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
@end


これらのイベントは標準的な CocoaTouch アプリケーションのイベントと同じです。

すべてのイベントとすべてのタッチをハンドリングできます。マルチタッチな環境で、どのタッチを処理するのかはあなた次第です。

CCLayer のサブクラスでこれらのイベントを有効にするには、以下のように、isTouchEnabled に YES を設定するだけです。

    self.isTouchEnabled = YES;


目的の定められた(targeted)タッチデリゲート

@protocol CCTargetedTouchDelegate 
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;
@optional
// touch updates:
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
@end


目的の定められた(targeted)これらのタッチイベントと標準的な(standard)タッチイベントには以下に記述する2つの重要な違いがあります。

1. これらのメソッドはシングルタッチのみを取り扱います。それで、このメソッドの名前は、ccTouches というふうに複数形で開始されず、ccTouch というふうに単数形で始まります。
2. ccTouchBegan メソッドは必須となっており、ブール値(boolean)を返却する必要があります。


ccTouchBegan は有効なタッチのそれぞれで、別々に呼び出されます。また、そのタッチに対して処理を行うことを示すために YES を返却する必要があります。

ccTouchBegan で 要求があった(YES を返却した)タッチのみ、その後の Moved や End や Cancelled イベントが呼び出されることとなります。(これら3つのイベントは必須ではありません。)

これらのイベントを受信するためにはグローバルディスパッチャを目的の定められた(targeted)デリゲートとして登録しなければなりません。

CCLayer のサブクラスで、registerWithTouchDispatcher を以下のとおりオーバーライドしてください。

-(void) registerWithTouchDispatcher
{
[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}


(CCTouchDispatcher.h をファイルの一番上でインポートする必要があります。)

どちらを使えばいいのか?

とても複雑な登録のことはさておき、目的の定められた(touched)デリケートの使用は通常の場合簡単です。NSSet を自身で分割したり、Moved/Ended/Cancelled イベントないでそのイベントでの処理が必要かどうかを確認し続けなくてよいからです。

ただし、ひとつのメソッド内で複数のタッチの処理を行いたい(例えば、画面のズームや回転での処理)のであれば、代わりに標準的な(standard)タッチデリゲートを使用したいと考えるでしょう。

メモ:一度に使用できるのはどちらかのデリゲートのみです。

マルチタッチ

マルチタッチイベントを受信するためには、イベントを有効にする必要があります。

AppDelegate の applicationDidFinishLaunching に以下のコードを追加することで、イベントを有効にできます。

   [glView setMultipleTouchEnabled:YES];


CCLayer 以外はのオブジェクトでのタッチの有効化

これまでで解説した isTouchEnabled と registerWithTouchDispatcher は、CCLayer とそのサブクラス(特に、CCMenu ははじめから有効化されています)のみで適用可能です。他のクラスに対して適用するためには、少しやらなければならないことがあります。

・有効化するクラスに CCStandardTouchDelegate または CCTargetedTouchDelegate かどちらかのプロトコルを実装しなければなりません。
・CCNode のサブクラスの場合は OnEnter メソッド内でタッチディスパッチャを登録し、OnExit メソッドでタッチディスパッチャを解除しなければなりません。(CCNode のサブクラスでない場合はそれに似た適切なタイミングで登録、解除を行います。)そのクラスがすでにシーン内で実行中でも、シーンの途中でタッチ入力の変更をする必要があるのであれば、すぐに登録、解除が可能です。

後者は、CCLayer では isTouchEnabled に相当するもので、以下のとおり手動で行わなければいけません。

CCStandardTouchDelegate では、

- (void)onEnter
{
[[[CCDirector sharedDirector] touchDispatcher] addStandardDelegate:self priority:0];
[super onEnter];
}


CCTargetedTouchDelegate では、

- (void)onEnter
{
[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
[super onEnter];
}


両方で、

- (void)onExit
{
[[[CCDirector sharedDirector] touchDispatcher] removeDelegate:self];
[super onExit];
}


既知の問題

ccTouch または ccTouches ハンドラ内で NSLog や CCLog を呼び出すことは、パフォーマンスの多大な低下の原因となります。

-----------------------------

一度に二つ以上のタッチを扱わないようなゲームだったら、targeted デリゲートを使えばいいということですね。

たしかに、通常はシングルタッチで十分のような気がします。

みやちかんたろうの大冒険でも、確かにプレイ中はシングルタッチのみですね。

だんだんと核心に迫ってきました。次は、基本動作に関して読み進めていきたいと思います。


スポンサード リンク

cocos2d 基本コンセプトを日本語訳の巻

今回は、cocos2d の基本コンセプトを日本語訳しながら読んでいきます。

ここで、cocos2d の全体像を把握しておきましょう。

(transformed のいい日本語訳があったら教えてください。。)

-------------------
<目次
cocos2d の基本コンセプト

cocos2d アプリケーションの開発を進めていく上で、cocos2d ライブラリに導入されている押さえておくべきいくつかの基本となる概念があります。

シーンとは

CCScene オブジェクトとして実装されているシーンはある意味で、アプリケーションのワークフローとは独立した存在です。スクリーンやステージと呼ばれる事もあります。

たくさんのシーンをアプリケーションで実装することができますが、一度に実行できるのはひとつのシーンだけで、複数とシーンを同時には実行できません。

例えば、あなたのゲームに、導入、メニュー、1面、挿入シーン、2面、ゲームクリアシーン、ゲームオーバー、ハイスコア、といったようなシーンを持たせることができます。

それら全てのシーンはそれぞれ独立したものとして定義できます。それぞれのシーンは、シーンをつなぐための論理に基づく方法で、互いに少しだけ関連付されます。(導入シーンが中断されたり終了した場合はメニューに遷移し、1面クリアしたら挿入シーンへ、クリアに失敗したら失敗用の挿入シーンへ遷移するでしょう。)



cocos2d の CCScene は、ひとつ以上のレイヤー(CCLayer オブジェクトで実装されている)で構築されており、すべてのレイヤーは積み重なっています。レイヤーはシーンに表示と動作を与えます。一般的な使用法は、必要とされる複数のレイヤーのシーンのインスタンスを構築することです。

CCTransitionScene オブジェクトで実装された遷移と呼ばれるCCSceneのファミリクラスがあります。そのクラスは2つのシーン同士の遷移を提供します。(フェードアウト、フェードインやスライドインなどの遷移方法があります。)

シーンは CCNode のサブクラスなので、手動またはアクションクラスを使用することにより変形可能です。詳細は、アクションの章を参照してください。

ディレクターとは

CCDirector はシーンの遷移を管理するクラスです。

CCDirector は共有オブジェクト(シングルトンオブジェクト)です。どのシーンが現在動作しているのかを把握しており、シーンのスタックに、シーンの呼び出しなどの処理の許可をおこないます(何かの入力の間、シーンを一時停止しそのままの状態で置いておき、入力が終了したら元の状態に戻す等)。

CCDirector は、CCLayer から現在のシーンのプッシュ、切り替え、終了の要求により実際に CCScene を変更します。

CCDirector は OpenGL ES の初期化も担っています。

レイヤーとは

CCLayer は全描画領域のサイズを保持しており、レイヤー自身への描画方法を把握しています。

レイヤーは半透明(一部または全部に部分的なな透過や穴を持つ)にすることが可能なので、レイヤーの背後の他のレイヤーを表示できます。

レイヤーは表示と振る舞いを定義するものなので、必要な処理を行う CCLayer のサブクラスの実装にプログラミングの時間のほとんどを費やすことになるでしょう。



CCLayer でイベントハンドラの定義を行います。イベントは、どれかのレイヤーがそのイベントを受け取り、受理するまで、レイヤーの全面から背後に向かって伝達されます。

CCLayer のサブクラスの定義が必要な高度なアプリケーションもありますが、cocos2d では使い勝手の良いレイヤーをライブラリとして提供しています(簡単なメニューの CCMenu、色のレイヤーの CCColorLayer、他のレイヤー間で多重化するレイヤーの CCMultiplexLayer など)。

レイヤーは子オブジェクトとして、CCSprite オブジェクト、CCLabelオブジェクトそして他の CCLayer オブジェクトを保持することができます。

レイヤーは CCNode のサブクラスなので、手動またはアクションクラスを使用することにより変形可能です。詳細は、アクションの章を参照してください。

スプライトとは

cocos2d のスプライトは他のコンピュータのスプライトと同様です。移動、回転、拡大縮小、アニメーション等が可能な2次元画像です。

Sprite(CCSprite クラスで実装されている)は、子オブジェクトとして他のスプライトを保持することができます。

親オブジェクトが変化した場合は、子オブジェクトも同様に変化します。


スプライトは CCNode のサブクラスなので、手動またはアクションクラスを使用することにより変形可能です。詳細は、アクションの章を参照してください。
スポンサード リンク

cocos2d 初心者ガイドレッスン3の巻

レッスン3を日本語訳していきます。

ここでは、メニューとかシーンとかについて説明されてるみたいです。

かっこいいメニューが作れたらいいなって良く思います。

さて、cocos2d ではどうメニューやシーンを実現してるんですかね。

興味津々にまいりましょう!!

--------------------
<目次
レッスン3 メニューとシーン

このレッスンで、Cocos2d でどのようにゲームをシーンの分けるのか、そしてどのようにシーン間を遷移させるのかについて学んでいきます。

それらのことはとても簡単に理解できるようになるので、CCMenu と、メニューシーンの構築を簡単にしてくれる関連クラスの解説もしましょう。

このレッスンは、レッスン1 インストールとテストレッスン2 はじめてのゲーム をすでに理解していることを想定しています。

シーン

cocos2d では、シーンとは、みえている他のすべてのノードの基本となる親ノードとして動作する特別なノードと定義されています。

好きなように使用しても良いのですが、典型的な使用方法は、実際にゲームをプレイするシーンやタイトルのシーン、ハイスコアのシーン、設定のシーンなどでしょう。

シーンは CCScene クラスで表されます。

シーンは、それが目に見える場合や、シーン上に動作するアクションが存在する場合などに「実行中」と呼ばれます。

一度にひとつのシーンしか実行できません。

しかし、現在実行中のシーン上に別のシーンを差し込むことが可能です。その時は、現在実行中のシーンは一時に中断され、重ねた別のシーンが実行中となります。

その後、差し込んだシーンを閉じた時は、最初に実行中だったシーンが再度実行中となります。

シーンを他のシーンに入れ替えることもできます。これは、ほとんどメモリを消費しないので、好まれてる方法です。

このシーンの差し込み・抜き出しやシーンの入れ替えは、ディレクター(CCDirector) によって行われます。

レッスン1で紹介したテンプレート内を確認した際に CCDirector をすでに見かけたと思います。

アプリケーションデリゲートの中を確認してみてください。(例えば、Lesson1AppDelegate.m など、プロジェクトの中でそれが呼ばれてるならどこでも構いません。)applicationDidFinishLaunching メソッドの下の方にこのようなコードがあると思います。

	[[CCDirector sharedDirector] runWithScene: [HelloWorld scene]];


このコードは、ディレクターに対して、引数として指定したシーン(HelloWorld)でシーンを開始するように伝えています。

例えば、メニューシーンでユーザがプレイボタンをタップした場合や、ゲームオーバーになったときにメニューに戻りたい場合などに、実行しているシーンを別のに変更するためには、ディレクターの replaceScene メソッドを呼び出すだけでいいのです。

	[[CCDirector sharedDirector] replaceScene: [SomeOtherScene scene]];


このコードは現在実行中のシーンを終了し、指定した次のシーンを開始します。後で、最初の(または、他の)シーンを、replaceScene を呼び出してもう一度再開することができます。

かわりに現在のシーンをいったん停止しておきたいだけなのであれば、replaceScene のかわりに pushScene を使用します。popScene を後ほど呼び出すことで、新しく実行中になったシーンを終了し、以前実行中だったシーンを再開することができます。

ただし、iPhone のメモリは限られており、シーンはメモリ上に常駐するので、このメソッドは、ちまちまと使用してください。

ディレクターには他にいろいろと便利なことができます。たとえば適切に一時停止・再開したい時などは、CCDirector リファレンスで詳細を確認してください。

ファンシーな(装飾された)遷移

CC~Transition では多くのシーン間のファンシーな遷移をサポートしています。

[[CCDirector sharedDirector] replaceScene:
[CCTransitionFade transitionWithDuration:0.5f scene:[SomeOtherScene scene]]];


一般的によく使われる遷移には、以下のようなものがあります。

・CCTransitionFade
・CCTransitionFlipAngular
・CCTransitionShrinkGrow
・CCTransitionMoveInB
・CCTransitionMoveInT
・CCTransitionMoveInL
・CCTransitionMoveInR
・CCTransitionFadeTR
・CCTransitionFadeUp
・CCTransitionFlipX
・CCTransitionFlipY
・CCTransitionPageTurn
・CCTransitionCrossFade

遷移の種類をもっと確認したいのであれば、 API ドキュメントをチェックしてください。

メニュー

メニューは、よく知られた GUI の概念であるボタンを使うことによってゲームとユーザを相互的に動作させる方法を提供します。

メニューは、ディレクターにシーンの変更を伝えるためによく使用されますが、ゲームをコントロールする際に、便利に柔軟に使用することもできます。

メニューを作るためには単にメニューのインスタンスを作るだけです。

    CCMenu * myMenu = [CCMenu menuWithItems:nil];


このコードで、メニューアイテムがない空のメニューが作られます。

メニューを使用可能とするためには、メニューアイテムを追加する必要があります。

メニューアイテムにはいくつかの選択肢があります。

・CCMenuItemAtlasFont
・CCMenuItemFont
・CCMenuItemImage
・CCMenuItemLabel
・CCMenuItemSprite
・CCMenuItemToggle

それぞれのメニューアイテムの種類には、微妙な違いがあります。

ただし、基本的に、それらにはボタンがタッチされた時に呼び出されるターゲットとセレクターを定義することができます。

一番簡単につくれるメニューのひとつに、CCMenuItemImage があります。これは、メニューアイテムのためにヒット領域が定義されたイメージとして使用可能です。


    CCMenuItemImage *menuItem1 = [CCMenuItemImage itemWithNormalImage:@"myFirstButton.png"
selectedImage: @"myFirstButton_selected.png"
target:self
selector:@selector(doSomething:)];


・itemWithNormalImage はメニューアイテムとして使用したい画像を設定します。
・selectedImage はボタンが押下された際に使用される画像を定義します。
・target はメニューアイテムの押下にどのオブジェクトが応答するかを定義します。この場合「self」は、メニューが作成されたシーンを参照します。
・selector は呼び出されるべきターゲットメソッドです。

メモ:@selector(doSomething) と @selector(doSomething:) には違いがあります。(違いはコロンの有り無しです)コロンが付いている方は、そのメソッドに menuItem オブジェクトが渡されます。

これは、呼び出されたメソッドに付加的な値を渡したい時に役立ちます。

例えば、メニューアイテムの tag で次に何をするのか決定することができます。

また、MenuItemType のサブクラスに付加的な情報を含めることにより、doSomething メソッド内でその情報にアクセスすることもできます。

いったんメニューアイテムを構築したら、他の CCNode に追加したのと同じ方法でメニューにアイテムを追加することができます。

   [myMenu alignItemsVertically];


あるいは、次のように menuWithItems コンストラクタを次のように変更することにより、複数のメニューアイテムを一度に構築してそれをメニューに追加することができます。(この例のように、コンストラクタの最後に nil を指定するのを忘れないようにしてください)

CCMenu *myMenu = [CCMenu menuWithItems:menuItem1, menuItem2, menuItem3, nil];


CCMenu には alignItemsVertically や alignItemsInRows といったメニューをレイアウトするいくつかの便利なメソッドがあります。それらは以下のように使用します。

   [myMenu alignItemsVertically];


同時にそれを指定し、以下のようにメニューを構築します。

// いくつかのメニューアイテムを構築します
CCMenuItemImage * menuItem1 = [CCMenuItemImage itemWithNormalImage:@"myfirstbutton.png"
selectedImage: @"myfirstbutton_selected.png"
target:self
selector:@selector(doSomethingOne:)];
 
CCMenuItemImage * menuItem2 = [CCMenuItemImage itemWithNormalImage:@"mysecondbutton.png"
selectedImage: @"mysecondbutton_selected.png"
target:self
selector:@selector(doSomethingTwo:)];
 
 
CCMenuItemImage * menuItem3 = [CCMenuItemImage itemWithNormalImage:@"mythirdbutton.png"
selectedImage: @"mythirdbutton_selected.png"
target:self
selector:@selector(doSomethingThree:)];
 
 
// メニューを構築し、メニューアイテムを追加します
CCMenu * myMenu = [CCMenu menuWithItems:menuItem1, menuItem2, menuItem3, nil];
 
// メニューアイテムを垂直に配置します
[myMenu alignItemsVertically];
 
// メニューをシーンに追加します
[self addChild:myMenu];


この6つの画像を使ってこのテストを実施してみてください。



この画像でテストを行うためには、まず画像をプロジェクトのルートディレクトリにダウンロードして、Xcode の Resources フォルダに追加します。(iPhone システムは大文字小文字を区別するので、ダウンロードするときは大文字小文字の違いに気をつけてリネームしてください。)

それぞれのメニューアイテムは別々のコールバック関数を定義しているので、それらを追加する必要があります。

- (void) doSomethingOne: (CCMenuItem  *) menuItem 
{
NSLog(@"The first menu was called");
}
- (void) doSomethingTwo: (CCMenuItem *) menuItem
{
NSLog(@"The second menu was called");
}
- (void) doSomethingThree: (CCMenuItem *) menuItem
{
NSLog(@"The third menu was called");
}


メニューやその仕様方法についてより詳細に理解するために、CCMenu についての文書をひと通り確認して下さい。

最初の3つのレッスンを終えたら以下のようなコードになっているはずです。メニューのセットアップは別メソッドに分けてあるので注意してください。

//
// HelloWorldLayer.m
// Lesson1
//
 
 
// Import the interfaces
#import "HelloWorldScene.h"
#import "CCTouchDispatcher.h"
 
 
CCSprite *seeker1;
CCSprite *cocosGuy;
 
// HelloWorld implementation
@implementation HelloWorld
 
+(id) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
 
// 'layer' is an autorelease object.
HelloWorld *layer = [HelloWorld node];
 
// add layer as a child to scene
[scene addChild: layer];
 
// return the scene
return scene;
}
// set up the Menus
-(void) setUpMenus
{
 
// Create some menu items
CCMenuItemImage * menuItem1 = [CCMenuItemImage itemWithNormalImage:@"myfirstbutton.png"
selectedImage: @"myfirstbutton_selected.png"
target:self
selector:@selector(doSomethingOne:)];
 
CCMenuItemImage * menuItem2 = [CCMenuItemImage itemWithNormalImage:@"mysecondbutton.png"
selectedImage: @"mysecondbutton_selected.png"
target:self
selector:@selector(doSomethingTwo:)];
 
 
CCMenuItemImage * menuItem3 = [CCMenuItemImage itemWithNormalImage:@"mythirdbutton.png"
selectedImage: @"mythirdbutton_selected.png"
target:self
selector:@selector(doSomethingThree:)];
 
 
// Create a menu and add your menu items to it
CCMenu * myMenu = [CCMenu menuWithItems:menuItem1, menuItem2, menuItem3, nil];
 
// Arrange the menu items vertically
[myMenu alignItemsVertically];
 
// add the menu to your scene
[self addChild:myMenu];
}
// on "init" you need to initialize your instance
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super" return value
if( (self=[super init] )) {
 
 
// create and initialize our seeker sprite, and add it to this layer
seeker1 = [CCSprite spriteWithFile: @"seeker.png"];
seeker1.position = ccp( 50, 100 );
[self addChild:seeker1];
 
// do the same for our cocos2d guy, reusing the app icon as its image
cocosGuy = [CCSprite spriteWithFile: @"Icon.png"];
cocosGuy.position = ccp( 200, 300 );
[self addChild:cocosGuy];
 
// schedule a repeating callback on every frame
[self schedule:@selector(nextFrame:)];
[self setUpMenus];
 
// register to receive targeted touch events
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self
priority:0
swallowsTouches:YES];
}
return self;
}
 
// on "dealloc" you need to release all your retained objects
- (void) dealloc
{
// in case you have something to dealloc, do it in this method
// in this particular example nothing needs to be released.
// cocos2d will automatically release all the children (Label)
 
// don't forget to call "super dealloc"
[super dealloc];
}
- (void) nextFrame:(ccTime)dt {
seeker1.position = ccp( seeker1.position.x + 100*dt, seeker1.position.y );
if (seeker1.position.x > 480+32) {
seeker1.position = ccp( -32, seeker1.position.y );
}
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
return YES;
}
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];
 
[cocosGuy stopAllActions];
[cocosGuy runAction: [CCMoveTo actionWithDuration:1 position:convertedLocation]];
}
 
- (void) doSomethingOne: (CCMenuItem *) menuItem
{
NSLog(@"The first menu was called");
}
- (void) doSomethingTwo: (CCMenuItem *) menuItem
{
NSLog(@"The second menu was called");
}
- (void) doSomethingThree: (CCMenuItem *) menuItem
{
NSLog(@"The third menu was called");
}
 
 
@end


メニューアイテムはセレクタのかわりにブロックを使用することもできます。


	// Create some menu items
CCMenuItemLabel *mi1 = [CCMenuItemLabel
itemWithLabel:someLabel
block:^(id sender) {
[theDirector pushScene:[SceneGame node];
}
];


Objective-C のブロックに付いてはここによい文書があります。ブロックを使用することで、簡単なメニューアイテムのための一度だけしか使用しないメソッドをコードから排除することができます。

-------------------------------

終わった。つかれた。

レッスン3も後ほど実施してみますね。
スポンサード リンク

cocos2d 初心者ガイド レッスン2の巻

レッスン1に引き続き、cocos2d 初心者ガイドレッスン2を日本語に訳しながら読んで行きます。

ここでは、スプライトを自動でまたはタッチイベントで動かすようです。

----------------------------------
<初心者ガイドレッスン1 初心者ガイドレッスン3>

始めてのゲーム

このレッスンのゴール

このレッスンでは、新規の cocos2d プロジェクト作成、スプライトの追加、自動かタッチベントでのスプライトの動作の解説を行います。

このレッスンの前に、基本コンセプトレッスン1を理解しておいてください。

初期のセットアップ

まずは、レッスン1で説明した通りに、“cocos2d-(version) Application” テンプレートで新規プロジェクトを作成してみましょう。

レッスン1で作ったものを、どこかへ手動でコピーし使用してもよいです。プロジェクトを実行すると、 “Hello World” という文字が期待通りに表示されることを確かめてみてください。

その際に、cocos2d のスプラッシュスクリーンが起動され、ホームボタンを押してデモンストレーションプロジェクトを終了すると、cocos2d のアイコンがホーム画面に追加されていることも確認してみてください。

スプラッシュスクリーンやアイコンは、プロジェクト内(ディスク上)の Resources フォルダの中に特別な名前で保存されています。

これらの画像を自分自身で用意した画像に差し替えたい時のため、そして背景やスプライトのための画像を追加するときのために、Resources フォルダと画像の場所を確認しておいてください。

(今すぐにスプラッシュやアイコンの画像を差し替えたいのであれば、同じ名前で同じ大きさの画像ファイルに差し替えてください。そうすれば、表示される画像が差し替えたものとなります。)


ここで、スプライトとして使用するための画像を一つ追加しておきます。ディスク上のプロジェクト内の Resources フォルダ直下に seeker.png という名前でこの画像を保存してください。

保存後に、Xcode の Resources フォルダを確認してみてください。

seeker.png は、Resources フォルダ内に存在していないと思います。ディスク上に追加しただけでは、自動的に Xcode のプロジェクトには追加されません。




ファインダーから Xcode プロジェクトの Resources フォルダ内にファイルをドラッグアンドドロップしてください。

いくつかのオプションが選択された状態のダイアログが表示されるので、それらのチェックを全部外して、追加ボタンをクリックしてください。

Xcode のプロジェクトの Resources フォルダ内に、seeker.png が追加されています。

このレッスンでは、ふたつのスプライトが必要ですが、画像を用意する時間を省くため、2個目のスプライトとして、すでにプロジェクトに入ってる Icon.png を使用することにします。


スプライトの構築

さっそく、Classes フォルダを開いてみてください。代表的な二つのクラス、HelloWorldScene と Lesson1AppDelegate (新しいテンプレートの場合は、代わりに HelloWorldLayer と AppDelegate)の、4つのファイルがフォルダ内にあると思います。

今回のレッスンでは、すべてのコーディングを HelloWorldScene.m におこなっていきますので、このファイルを選択してください。

まずは、何かしらの方法で我々が定義したスプライトを参照する手段が必要となってきます。

ひとつのメソッド内のみで参照すればいいのであれば、ローカル変数を使用すればよいのですが、これは稀なケースです。

タッチイベントに応じたスプライトの動作を行ったり、何らかのロジックに基づいてフレームごとにスプライトを動かしたり、そういったことを実現するためには、様々なメソッドからスプライトが参照可能である必要があります。

様々なメソッドからスプライトを参照するために、いくつかの方法があります。

今回ご紹介しているプロジェクト内のほとんどのデモンストレーションやテストのコード内では、スプライトをレイヤーに追加するときに割り当てる tag を使用しています。

tag を使用すれば、後ほど getChildByTag メソッドを使用してそのスプライトを参照することができます。

この方法は安全ですが、内部的には余計な処理を行っているので、何百個ものスプライトを使用するような大きなゲームではパフォーマンス上の問題が発生する場合があります。

そこで、より簡単な方法を使用することとします。この方法は、シーンのインスタンスを一度にひとつしか実行させない(通常ではあまり考えられない状態ですが)限り安全です。

スプライトの参照としてファイルスコープの変数を宣言します。ファイルの先頭の #import 行の下に、以下の2行を追加してください。

CCSprite *seeker1;
CCSprite *cocosGuy;


スプライトオブジェクトが参照できる2つの CCSprite のポインタを宣言しました。

宣言しただけでは何も参照していないので、次に、init メソッドで参照するものを定義します。

ファイル内から、-(id) init メソッドを見付け出してください。

このメソッドは、シーン(正確に言うと、シーンの中のメインレイヤ)が構築されているときに自動で呼び出されます。

if 文と 最後の return self は、常套句です。ここでは特に気にしなくてもよいでしょう。

変更は、if ブロック内におこなっていきます。

Hello World ラベルの構築は不要なので、最初から記述されている if ブロック内のコードは削除して、かわりに以下のコードを追加してください。

        // seeker スプライトを構築して初期化し、レイヤーに追加
seeker1 = [CCSprite spriteWithFile: @"seeker.png"];
seeker1.position = ccp( 50, 100 );
[self addChild:seeker1];
 
// cocos2d 君も同様に。アプリのアイコンを再利用します。
cocosGuy = [CCSprite spriteWithFile: @"Icon.png"];
cocosGuy.position = ccp( 200, 300 );
[self addChild:cocosGuy];


それぞれのスプライトのために3行ずつ追加しました。

最初の行は、spriteWithFile を呼び出して、このプロジェクトに追加されている画像でCCSprite オブジェクトを構築しています。

次の行は、スクリーン上のスプライトの中心位置を設定しています。ccp (cocos2d point の略) マクロを使って、X 、Y 座標で2次元位置(技術的には CGPoint 構造体)を作成しています。

メモ:cocos2d では、X 座標はスクリーンの左から始まって右側に向かって増加します。Y座標はスクリーンの下から始まって上に向かって増加します。

最後に、ぞれぞれのスプライトの3行目で、addChild メソッドを呼び出し、新しく作ったスプライトをレイヤーに追加しています。

コードを保存(cmd-s)して、実行(cmd-R)してみましょう。

結果は下のようになります。



動かし方

スクリーンにスプライトを表示する方法が理解できたと思います。

次は、これらのスプライトを動かしてみたいと思います。

スプライトを動かすには、基本的な2つの方法があります。

1.Action を使用して、決まった時間で、ターゲットとなる位置へ自動的にスプライトを動かす方法
または
2.ゲーム中定期的に呼び出されるメソッド内でスプライトを自分で動かす方法

まずは、2番目の方法を試してみます。

HelloWorldScene.m の init メソッドに変更を加えていきます。

先ほど、if ブロック内のコードでスプライトを構築しました。

その時行ったスプライトの初期化にもうひとステップ加えます。定期的に呼び出されるコールバック関数のスケジューリングをおこないます。

if ブロック内の [self addChild: cocosGuy]; の真下に以下のコードを追加してください。

        // フレームごとに繰り返し呼ばれるコールバックをスケジュール
[self schedule:@selector(nextFrame:)];


このコードでは、自身(HelloWorldのCCLayer)の schedule メソッドに対して、ひとつの引数を持つ nextFrame メソッドのアドレスを指定し、呼び出しています。

nextFrame メソッドは存在しないので作成しましょう。

HelloWorldScene.m の中でメソッド内以外の空行、例えば init メソッドの最終行と dealloc メソッドの開始行の間に、次のコードを挿入してください。

- (void) nextFrame:(ccTime)dt {
seeker1.position = ccp( seeker1.position.x + 100*dt, seeker1.position.y );
if (seeker1.position.x > 480+32) {
seeker1.position = ccp( -32, seeker1.position.y );
}
}


このように記述することにより、cocos2d ライブラリはアニメーションの各フレーム毎に nextFrame イベントを呼び出すようになります。

この定期的に呼び出されるイベントはいろいろなことを実施する機会を与えてくれます。例えば、スプライトの動作の実行、衝突の判定、物理的なモデルの更新、新しい敵の生成、不要なスプライトの削除などを行うことができます。

今回のレッスンでは、このイベント内で seeker のスプライトを動作させます。

position プロパティに新しい値を設定することで、スプライトを動作させることができます。(position の .x と .y に値を設定してもスプライトは動作しません。新しく point オブジェクトを指定する必要があります。)

イベント内では、スプライトの position プロパティの x の値に 100 * dt 加算しています 。こうすることで、スプライトは一秒間に 100 ピクセル動作します。

dtを使用してスプライトの移動する量を決めて動かしたい速さ(ピクセル毎秒)を指定する方法はとても有用です。
もしフレームレートが少しだけ変化した場合でも、一定のスピードを保ったまま動作させることができるからです。

それから、スプライトがスクリーンから、はみ出たかどうかを確認する必要があります。

iPhone がランドスケープモードと仮定し、横幅を 480 ピクセルとします。コードをより汎用的にしたい場合は、
[[CCDirector sharedDirector] winSize] で実際のスクリーンサイズを取得してください。

ただここでは、480 ピクセルとしておきます。そして、480 ピクセルにスプライトの半分のサイズの 32 を加算します。

こうしておくことで、スプライトの中心が 480 + 32 を超えた時にスプライト全体が右側から完全に見えなくなるので、そうなった場合に、スプライトの位置を左側から完全に見えなくなる -32 に再設定します。

タッチへの応答

イベントのハンドリングはコールバック関数のスケジューリングと少しの違いがあります。

イベントは、スクリーンにタッチした場合や、加速度計の読み込みなどに応じて呼び出されます。

これらのイベントはすでに定義されており、タッチイベントに関しては場合は、標準的な方法と目的が定められた方法の2つの異なる導入法があります。

これらふたつのタッチイベントの詳しい解説は、タッチデリゲート を参照してください。

このレッスンでは、目的の定められたデリゲート(target delegate)を使用します。そのためには、少しコードを変更する必要があります。

まず最初に、ファイルの上部、HelloWorldScreen.h をインポートしているコードの真下に以下のコードを追加してください。

#import "CCTouchDispatcher.h"


init メソッドの下あたりに、新しくメソッドを追加します。CCLayer に、標準的な方法(standard) ではなく 目的が定められた方法(targeted)を使用することを伝えるために以下のように記述します。、

-(void) registerWithTouchDispatcher
{
[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}


つぎに、再び init メソッドに戻って、if ブロックの終了直前に、タッチイベントを登録するための以下の行を追加してください。

    self.isTouchEnabled = YES;


追加したら、さらに新しいメソッドの場所を探してください。先ほど追加した nextFrame メソッドの真下あたりとなるでしょう。

それぞれのタッチイベントの目的の定められた(targeted)イベントセットを使用するので、少なくとも CCTouchBegan メソッドを実装擦る必要があります。

CCTouchBegan で YES を返却し、タッチディスパッチャに、このタッチに対するイベントを要求することを伝えましょう。

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
return YES;
}


こうすることで、同じタッチで別のメソッドが呼び出されるようになります。タッチが終了した場所にふたつめのスプライトを移動するコードを追加します。

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint location = [self convertTouchToNodeSpace: touch];
 
[cocosGuy stopAllActions];
[cocosGuy runAction: [CCMoveTo actionWithDuration:1 position:location]];
}



convertTouchToNodeSpace は、以下の動作を行います。

1.まず、ビュー内でのタッチの位置の取得します。
2.次に、CCDirector にその位置を GL 座標すなわち、描画のために使用するのと同じ座標系に変換するよう依頼します。(ポートレートとランドスケープ間の変換等を行います。)
3.最後に、それらの GL 座標を CCLayer のためのノードスペースに変換する。あまり大差はありませんが。

その後、我々は以下のことを行います。

1.次に、cocosGuy スプライトが直前までに行っているすべてのアクションを停止します。
2.最後に、1秒かけてスプライトをタッチ位置に移動させる新しいアクションを開始する。

メモ:アクションを使用しているので、nextFrame にこのスプライトを移動するためのコードを記述する必要はありません。

アプリを実行して実際に試してみましょう。指がスクリーンから離れたら(シュミレータでは、マウスのボタンをはなしたら)、ちょうどその位置に cocos2d のアイコンが疾走してくるでしょう。その間ずっと、シーカーロボットはスクリーン上を駆け回っているでしょう。

では、準備ができ次第、レッスン3に進みましょう。

---------------------------

いちいち nextFrame メソッドに動作を書かないでも、Action の定義で スプライトが動かせることがわかった。

次回はこれを試していきます。

じっちゃん、オラワクワクしてきた。
スポンサード リンク

cocos2dのデモプロジェクトをいじってみるの巻

今回も、日本語訳したレッスン1にしたがって、内包されたでもプロジェクトをいじってみたいと思います。

レッスン1によると、展開したものの中に cocos2d-ios.xcodeproj っていう Xcode のプロジェクトがはいってるってことなので、探してみます。

さがすまもなく見つかりましたので、Xcode4.5.2 でひらいてみます。

Xcode で File → Open で先程のファイルを選びましょう。

201301170004.png

プロジェクトナビゲータを展開すると、なんやらいろんなファイルがいっぱいありますねぇ。

とにかく実行してみます。

ActionManagerTest/iPhone 6.0 Simulator が初期表示されてるので、これを実行してみます。

Lesson1では、Option + Run を押せって書いてあったのでそのとおりにしてみます。

201301170005.png

Run をポチっとな。

あれ?何もおきないぞ・・・。

Install iOS 4.5 Library ってでてるから、それが終わるまでは始まらないのかな。

お、コンパイルが始まっただよ。

コンパイル超時間がかかっとる。

Mac Book Air のファンがヒュンヒュンなってる。

まだおわらない〜〜〜。

おっと、なんか起動したぞ・・。

201301170006.png

なんだこれは!!??

なんなんだこれは。。

落ち着け俺。。いったん、終了だ。

えっと、なんかもっとわかりやすそうなテストを選んでみます。

だいたい、ActionManagerってなんか、もうちょっと下の方の物のような気がして直感的に分かりにくそうですよね。ですよね。

スプライト・・・、スプライトだ!

スプライトなら判りやすそうだ。だって、ゲームって言えばスプライトでしょ。

ということで、ターゲットで SpriteTest を選択して、Run !!!

201301170008.png

お、さっきのおっさんがくるくる回ってる。

やっぱり何かわかりやすそう。

スクリーンをタップしろって書いてある。

タップ!

201301170009.png

ぎゃ〜! いろんなおっさんが増えた〜!

201401170010.png

おっさんならんだ〜!!!!

おもしろすぎなんだけどこれ。

いや、こういうセンス大好きです。

cocos2d がいま、大好きになりました。

よし、だいたいわかった。

もうちょっといろいろ実行してみたら、

Lesson2にすすもう。

ってか、これ変なおっさんだけじゃない。

パーティクルとかパララックススクロールとかすごすぎ。

なんか創作意欲が湧いてきた。

201301170011.png

スポンサード リンク

cocos2dのテンプレートを入れてみるの巻

日本語訳したレッスン1に従って、Xcode に cocos2d のテンプレートを入れてみたいと思います。

まずは、ダウンロードサイトから、最新の cocos2d をダウンロードします。

安定バージョン(2013年1月17日現在では、2.0 が最新です)をダウンロードします。

201301170001.png

cocos2d-iphone-2.0.tar.gz は 39MB あります。 予想より大きい。

以下のコマンドで展開します。

$ tar zxvf cocos2d-iphone-2.0.tar.gz


Finderで見ると、以下のとおり展開されました。

201301170002.png

プログラミングガイドによると、好きなエディタでREADMEを参照しろとのことだったので、


$ cd cocos2d-iphone-2.0
$ vim README.md


でREADMEを参照します。

cocos2d の README 日本語訳

cocos2d for iPhone
============

[cocos2d for iPhone] は iPhone や iPad や Mac OS X 用の 2D ゲームやデモやその他のクラフィカルでインタラクティブアプリケーションを構築するフレームワークです。

[cocos2d]のデザインがベースとなってますが、python のかわりに objective-c を使用します。

cocos2d for iPhone は、

* 早い
* 安い
* うまい
* 無料
* 簡単に使える
* コミュニティーにサポートされている

という特徴があります。

新しいゲームの始め方
------------------
1. [Github] または [cocos2d ダウンロードサイト] からソースコードをダウンロード
2. スクリプトの`install-templates.sh`を実行

例:
$ cd cocos2d-iphone
$ ./install-templates.sh -f

3. そして、Xcode を起動して、新規 → 新規プロジェクト → cocos2d v2.x

主な機能
-------------------

* シーン管理(ワークフロー)
* シーン間の遷移
* スプライトとスプライトシート
* 効果:レンズ、さざなみ、波、流体等
* 動作(ふるまい)
 * 変形動作:移動、回転、拡縮、フェード、濃淡、等
 * 構成動作:連続、発生、繰り返し、反転
 * 緩やか動作:指数、サイン、立方、伸縮
 * 雑多動作:関数呼び出し、軌道カメラ、追跡、中間
* 基本メニューとボタン
* 物理エンジンとの統合:[Box2d]と[Chipmunk]
* フォント
 * 固定フォントや様々なサイズのフォントを使った素早いレンダリング
 * .ttf フォントのサポート
* タイルマップのサポート:直行、等角投影、六角形
* パララックススクロール
* モーションストリーク
* レンダーとテクスチャ
* iPhone 上でのタッチ/アクセラレータ
* Mac 上でのタッチ/マウス/キーボード
* OpenALをベースとしたサウンドエンジンのサポート(CocosDension library)
* スローモーションとファストフォワードの統合
* 高速テクスチャ:PVR 圧縮と解凍テクスチャ
* ポイントベース:網膜ディスプレイ互換
* 言語:objective-c
* 商用オープンソースフレンドリ:オープン、クローズソースプロジェクトの互換
* OpenGL ES 2.0 (iOS) / OpenGL 2.1 (Mac) ベース

ビルドに必要な環境
-------------------
Mac OS X 10.6 以上、Xcode 4.2 以上

必要ランタイム
-------------------
* iOS 4.0 以上 -- iPhone ゲーム
* Snow Leopard (v10.6) 以上 -- Mac ゲーム

テストの実行方法
-------------------
Xcode スキーム選択で動かしたいテストを選択

Xcode → プロダクト → 実行 をクリック

プロジェクトへの貢献方法
-------------------
バグを見つけたって? 機能をリクエストしたい? 機能をマージしたい?

* [contributing cocos2d]

フォーラム
-------------------
* [cocos2d for iphone forum]

----------------------------------------------

以上です。

何かと適当な和訳でスミマセン。

わかればいいだろ的な感じなので。

パララックススクロールとかモーションストリークとか、日本語でなんて言うんですかね。

続いて、install-templates.sh を実行しようと思いますが、その前に中身を確認しましょう。

コピー先は、

$HOME/Library/Developer/Xcode/Templates/$COCOS2D_DST_DIR/

みたいですね。

-f で強制上書き、-h で使用方法が表示されるようです。

なんか大丈夫みたいなので、兎にも角にも実行してみます。

$ ./install-templates.sh -u

実行結果は以下のとおり。
cocos2d-iphone template installer



Installing Xcode 4 cocos2d iOS template
----------------------------------------------------

...creating destination directory: /Users/bokuyasunari/Library/Developer/Xcode/Templates/cocos2d v2.x/
...copying cocos2d files
...copying CocosDenshion files
...copying CocosDenshionExtras files
...copying Kazmath files
...copying template files
done!



Installing Xcode 4 Chipmunk iOS template
----------------------------------------------------

...copying Chipmunk files
done!



Installing Xcode 4 Box2d iOS template
----------------------------------------------------

...copying Box2d files
done!



Installing Xcode 4 CCNode file templates...
----------------------------------------------------

...creating destination directory: /Users/bokuyasunari/Library/Developer/Xcode/Templates/File Templates/cocos2d v2.x/
done!


なんか成功したみたい。

では、Xcode を立ち上げてみます。

201301170003.png

やったー!!テンプレートが表示されておる。

よし、これでいつでも開発を開始できるぞ。


スポンサード リンク

cocos2d 初心者ガイドレッスン1の巻

今回は、cocos2dのプログラミングガイドの中の初心者ガイドレッスン1を日本語に訳しながら読んでいきます。

ここでは、テンプレートのインストール方法について説明されてます。

--------------------
<目次 初心者ガイドレッスン1 初心者ガイドレッスン2>
Cocos2d for iPhone へようこそ!


Cocos2d for iPhone は OpneGL ES を基にした、 iPhoneやiPod touch や iPad のゲームを作るライブラリです。

cocos2d に関して前提知識がほとんどまったくない人向けに、Cocos2d のセットアップと使用の開始方法を説明することを通して理解を深めていただくための文書です。

0.アップルの開発ツールのインストールと iPhone SDK

まだ iOS のソフトウェア開発キット(SDK) をインストールしていないのであれば、まずは iOS Developer Center から手にいれてください。

このサイトにある Xcode は、アップルの統合開発環境(IDE)で、プログラムの編集やコンパイルをするために使います。

Xcode にはコードライブラリやドキュメントなどなど iOS の開発で一般に必要とされるものが含まれています。



アップルのサイトから SDK をダウンロードするには、アップル開発プログラムに登録する必要があります。

登録は無料となっています。(しかし、App Store にあなたが作ったアプリをアップする場合は、$99 の年会費がかかる会員にアップグレードする必要が有ります。)


(メモ:iPod touch や iPad 向けにソフトウェアを開発する場合でも、「iPhone 開発」 と呼ぶのが一般的となっています。この3つのデバイスには iOS という OS が使用されており、ソフトウェア開発者としての観点がとってもよく似ているためです。)



iOS SDK のダウンロードやインストールにはとても時間がかかるので、なるべく早くこのステップを始めて、終わるまでの待ち時間に何かやれることを見つけておくことをおすすめします。


1.ソースファイルのダウンロード

ダウンロードページから、安定バージョンの tar 形式の圧縮ファイル をダウンロードします。

ダウンロードが終わったら、ファインダー上でそのファイルをダブルクリックして解凍します。

以下のようなファイルに展開されます。



これらのファイルが何であるかというと、ほとんどはプレーンテキストのファイルです。

標準的な拡張子がついてないので、ファインダー上ではどんなファイルなのかわからないかもしれません。

AUTHORS, CHANGELOG, LICENSE.box2dなどのファイル名が大文字のファイルを、お好みのテキストエディタにドラッグアンドドロップしてみてください。

(TextWrangler というテキストエディタは、無料でとても使い勝手が良くて気に入っています。ただし、他にもたくさんの選択肢があります。)


READMEをまず読んでみてください。さまざまなファイルがどのようなファイルなのかや、使用開始におけるいくつかの注意点や知っておくべきことなどが書かれています。(このレッスンほど詳しくはありません。)

2.テストの実行

cocos2d-ios.xcodeproj は README の中で説明されていないファイルの中で一番重要です。 Xcode でこのファイルを開いてみてください。

この大きなプロジェクトの中には、cocos2d のテストコードやデモプログラムなどのたくさんのサブプロジェクトの全ソースコードが含まれています。

この、テストコードやでもプログラムを試しに実行してみることは、cocos2d の機能を理解する上でとても有効な方法で、これらのソースコードを参照することは、cocos2d の先駆者たちがどのように様々なことを実装しているかを知るために大変役に立ちます。

どのコードを実行するか選択するには、アクティブなターゲットとアクティブな実行可能ファイルを設定します。

設定には2つの方法があります。ひとつ目は、メニューバーのプロジェクトにある、アクティブターゲットの設定およびアクティブな実行ファイルの設定というサブメニューを使用する方法です。

ふたつ目は、これらのオプションを、メインのツールバーに追加する方法です。
メニューの表示でツールバーのカスタマイズを選択します。そして、ウィンドウの上部のツールバーに、 「アクティブなターゲット」と「 アクティブな実行ファイル」 をドラッグアンドドロップすることで追加できます。

この方法で、アクティブとしたいターゲットや実行ファイルを選択することができます。

どちらかの方法で、実行したいアクティブターゲット、たとえば、「スプライトテスト」や「パーティクルテスト」を選択しましょう。

アクティブな実行ファイルはアクティブターゲットによって自動的に選択されますが、もし何かの原因で選択に失敗した場合は、手動でアクティブな実行ファイルを選択する必要があります。

Xcode3では、このようにアクティブターゲットやアクティブな実行ファイルを選択しますが、Xcode 4 では、どの設定をビルドに使用するか、どのデバッガを使用するか、どの実行ファイルを起動に使用するかといったビルドターゲットを定義するスキームを選ぶ必要があります。

Option + 実行ボタンをクリックして、スプライトテスト」や「パーティクルテスト」といったスキーマをドロップダウンリストから選択し、「ビルドと実行」(「ビルドとデバッグ」かもしれない)をクリックしましょう。

プロジェクトのコンパイルが開始され、iPhone/iPad シュミレータが起動し、デモが開始されます。

エラーが発生した場合は、プロジェクト→プロジェクトの設定の編集→ビルド を選択し、C/C++コンパイラのバージョンが "GCC4.2" 以外の "LLVM 4.2" といったものになっていないかどうか確認して下さい。

テストやデモをある程度実行した後は、ソースコード自体を確認してみてください。

今から作成するアプリに参考になるコードは、ウィンドウの左側のクループとファイルにあるテストフォルダの中を参照してください。

ほとんどのファイルのファイル名はターゲットと一致しています。パーティクルのテスト用コードの場合は、ParticleTest.h というヘッダファイルと PartilcleTest.m というソースファイルとなっています。

デバッグについて詳しく学びたい場合は、Xcodeのデバッグ技術を参照してください。

実際にコードを実行させながらデバッグする方法、たとえば、ソースコードの特定の位置で停止させる方法や、変数内の値を参照する方法や、ログの出力方法、(大声で公然とソースコードとお話を剃る方法も)などを理解することができます。

今までデバッグをまったくやったことがない場合でも心配は無用です。ただし、こういったことが可能だということを覚えておいて、実際に必要になった場合はこのリンク内のデバッグ技術を参照してみてください。

3.プロジェクトテンプレートのインストール

実際には、Cocos2dを使用する際にインストールする必要があるものはありません。

Cocos2d は単なるソースライブラリとなっており、適切に設定されたプロジェクト内に適切なソースコードを書いてあげれば、実行可能が可能です。

ただし、開発を簡易にすすめるために、cocos2d は多数の Xcode プロジェクトテンプレートを備えています。

任意のコンポーネントが付随したプロジェクトを作成するために、以下のテンプレートが用意されています。

・cocos2d スタンドアローンテンプレート
・cocos2d + box2d テンプレート
・cocos2d + chipmunk テンプレート

テンプレートをインストールする際は、ターミナルアプリケーションを起動して、以下のように入力して下さい。

$cd cocos2d-iphone
$./install-templates.sh -u


(一行目の cocos2d-iphone は、実際の cocos2d のパスにあわせてください。まず、ターミナルに cd と入力し、ファインダーのフォルダーをターミナルにドラッグアンドドロップすれば、簡単に入力することができます。)

このスクリプトを実行したときに、すでにテンプレートのディレクトリが存在している場合は、インストーラはコピーをスキップしてしまいます。強制的に上書きしたいときは、以下の通りのオプションを指定して実行してください。

$./install-templates.sh -f -u


4.新しいプロジェクトの作成

テンプレートのインストールが成功したら、テンプレートを使って、Xcode でプロジェクトを作成することができるようになります。

1.Xcode を起動
2.ファイル → 新規プロジェクトの順に選択
3.cocos2d のいずれかのテンプレートを選択

テンプレートから作成したプロジェクトは、そのままで実行可能です(ぜひ実行してみてください)。iPhone シュミレータが起動し、”Hello World” が表示されます。

このテンプレートから作成したプロジェクトに、独自のコードを追加し、ゲームを作成していくことができます。

次のステップ

さあ、実践してみよう。そのまえに、少しだけ時間を取ってこのレッスンで理解したことをまとめておきましょう。

・Xcode と iPhone SDK のインストール
・cocos2d-iPhone ライブラリのダウンロードと解凍
・cocos2d テストの実行とソースコードの確認
・新規プロジェクトテンプレートのインストール
・最初の”Hello World”プロジェクトの構築と実行

cocos2d の動作原理、ゲーム作成で何が必要なのかといったことをさらに学んでいくための準備ができました。大きな進歩といえるでしょう。

動作方法や重要な単語の意味などの cocos2d の全体像について記述してある基礎概念を熟読し理解するところから始めましょう。

その後、レッスン2、最初のゲームに進んでみてください。

-------------
レッスン1終わったー。
よし、次は実際に実行してみます。
テンプレートをインストールして実行だな。


スポンサード リンク

cocos2d のプログラミングガイドを読むの巻

茶色いアンチクショウの正体もわかったことだし、

今日は、cocos2d for iPhone をインストールしてみます。

DocumentationからProgramming Guideを選ぶと、

ココにたどり着きます。

cocos2d プログラミングガイド を日本語に訳しながら読んでみましょう。

-------------------------
プログラミングガイド

cocos2d プログラミングガイドは cocos2d を使用するアプリケーションを書くための詳細な文書を提供します。

ここで説明された多くのトピックスは、別途提供される cocos2d API リファレンスを参照しています。

このガイドが cocos2d について学ぶ最初の機会ならば、初心者ガイドから読み始めることを推奨します。

範囲

この文書はv0.99.xをもとに書かれています。なにか問題を発見したら、Wiki を編集するか、フォーラムにメールを下さい。よろしくお願い致します。

初心者ガイド

・レッスン1:インストール そして 空のプロジェクトの開始
・レッスン2:はじめてのゲーム
・レッスン3:シーンとメニュー

基本コンセプト

・cocos2d の基本コンセプト
・cocos2d タッチと入力


動作、変換そして効果

・基本動作
・構成動作
・加減速(Ease)動作
・効果動作
・特殊動作
・アニメーション

スプライト

・スプライトの使い方

ラベルとフォント

ラベル/フォントの使い方

タイル化マップ

タイル化マップの使い方

パーティクル

パーティクルの使い方

描画と更新

描画と更新を理解する

ソーシャルネットワークと cocos2d との統合

・ソーシャルネットワークと cocos2d との統合

ディレクター

・EAGLView を初期化

cocos2d と UIKit コントロール達

・自動ローテーションの実装
・UIKit コントロールの追加

RetinaDisplay

RetinaDisplay アプリの作り方

ベストプラクティス
そして、cocos2d のベストプラクティスを忘れないで

・ベストプラクティス

サンプル/テスト

・サンプルとテスト

ユーザが提供したコードスニペット

・たくさんの有用なコードスニペットがフォーラム上に投稿されています。それらを見つけ出すのは難しいので、このページにまとめました。

サンプルゲーム
最後に、君はオープンソースや商用のiPhone 用の cocos2d のゲームを購入、ダウンロードできます。

・サンプルゲーム

-------------------------
次からはそれぞれを訳しながら読んでいきたいと思います。

スポンサード リンク

cocos2dの茶色いのを調べてみるの巻

今回は、iPhoneで2Dゲームが簡単に作れちゃうという噂の

cocos2d について調べていきます。

まずは、Webサイトへ移動。

Blog、Store、Forum、Games、Download、Documentation、About、Archives っていうタブの中で Store っていうタブが気になったので、クリックすると、

http://www.cocos2d-iphone.org/

T-Shirt やら Mug がうってる。

2013011404001.png

っていうか、この茶色いのなんだろう・・・。

まずはこの茶色いのの正体がわからないと、落ち着かないので調べてみます。

英和辞書サイト weblio に cocos って入力してみたところ、

2013011404002.png

ココヤシ・・・だと・・・。

たしかに coco はココヤシだけど、このキャラとココヤシがまったく結びつかんかった。

ヤシってもっとツルツルしたイメージがありましたが、ぎざぎざしてるんですかねぇ。

という事で、先生で画像検索。

coco で画像検索すると、

キャー!変な外人がいっぱいー!
※良い子はまねしないでね。

で、気分を改めまして、cocos で検索すると、

ケバケバが付いてるのね。ココヤシの表面にはケバケバがついてるのね。

この絵のつんつんしてるのは、そのケバケバなのかぁ。

なんかちょっとすっきりした。

もし僕の認識が間違っていて、じつはココヤシじゃなかったとしても、誰も何も言わないでください。またモヤモヤしちゃうので。

よし、アプリが出来上がったあかつきには、このマグカップを購入することをお約束しましょう。

2013011404003.png

13.95$・・・・ってちょっと高価ですね。

でも、cocos2d さんのおかげで100万ダウンロードされたらうれしくて買っちゃいますね。

食器棚を cocos2d のマグカップで埋め尽くすことを夢見て頑張っていきたいと思います。

すっかり、話がそれてしまいました。

次回は、茶色いのではなく、cocos2d for iPhone について調べます。



スポンサード リンク

OpenGL Gameテンプレートをいじってみるの巻

前回は、「山田さんの逆襲(仮題)」のプロジェクトを作成しました。

今回は、ウィザードで出来上がった OpenGL Game テンプレートを見ていきならが、実装のイメージを固めていきます。

みやちかんたろうの大冒険では、OpenGL ES 1.1で実装をしました。当時は iOS3 と iOS4 の両方が混在する環境だったので、1.1 での実装を選択しました。
結局、リリースしたときは、主流は iOS5 になってしまっていましたが。。。

今回は、OpenGL ES 2.0 に挑戦したいと思います。日々是挑戦。

というか、テンプレートから、1.1 は完全に消えてますね。前は、if 文で 2.0 か 1.1 かみたいな実装が描いてあったんですが。

まず、テンプレートのファイル構成。

2012011403001.png

Project Navigator をみると以下のファイルが自動生成されています。

2012011403002.png

よくわかりませんが、とりあえず起動してみます。

2013011402003.png

iPhone 6.0 Simulator が起動して、立方体がくるくる回りだしました。

OpenGL ES 2.0 は始めてなので、正直良くわかりません。
色々といじって理解してみたいと思います。

いつどのタイミングでどのメソッドが呼ばれているかがわからないと手も足も出ないので、COYViewController.mのメソッド全部にブレークポイントを仕掛け、呼ばれる順番に中身を見ていきます。


最初は、予想通り、ViewDidLoad が呼ばれました。

2014010302005.png

自分自身のコンテキストにOpenGL ES 2.0 を設定し、view のコンテキストに設定して、GL のセットアップを呼び出しています。

つぎは、setupGL が呼ばれました。

2014010302006.png

この中では、まず、シェーダーのロードを呼び出してます。

それが終わると、effect プロパティに値を設定していますね。

何を設定しているかというと、GLKBaseEffect をアロケートしてViewController の effect として設定しています。

GLKBaseEffectとはなんぞやを考える前に、まず、GLKitについて勉強する必要があるようです。

GLKitとは?

と、調べていると、cocos2d という単語を見かけました。

2Dゲーム作成のテンプレートだと・・・。なんか使えそうだ・・・。

OpenGL ES はちょっと横に置いといて、cocos2d について調べることにします。

こういう行き当たりばったりさが、仕事と違う趣味プログラムの醍醐味ですね。

次回は、cocos2dの巻です。
スポンサード リンク

Xcodeでプロジェクトを作の巻

前回は、Xcodeのバージョンアップをしました。

今回は、早速プロジェクトをつくっていきたいと思います。

Xcode 4.5.2 をたちあげます。

2013011302001.png

iOS Application で OpenGL Game を選択して、Next をクリック。

2013011302002.png

プロジェクトのオプションを入力する画面が表示されます。

まずは、Product Name を入力。

プロダクト名を考えなければならない。

プロダクト名は、いろんなところで使われるし、後でそうそう簡単に変えるわけにもいかなそうなので、きちんと決めておきたいところです。

で、よくあるのがコードネームを付けておく方法ですね。

まず、このゲームのコンセプトですが、「みやちかんたろうの大冒険」でブルマを盗まれ続けた山田さんが、ちかんくんには任せておられんということで、みずからブルマを探しに行く、というものです。

山田さんの逆襲(仮題)なので、英語タイトルは 「The Counterattack of Ms. Yamada」 でいいような気がします。

本当の題名は後々考えることとして、コードネームは「CounterattackOfYamada」としておきます。

そうそうブレることはないでしょう。

次に、Class Prefix ですね。

これは、おそらく、クラスを作ったときに自動的に付与されるプレフィックスを設定しておくものでしょう。

CounterattackOfYamada を略して、COY とします。

次は、Devicesですが、iPadに対応するつもりはありませんので、iPhoneを選択します。

さて、Use Storyboads と、Use Automatic Reference Counting はどうしようかなぁ。

Storyboadは、すべてのスクリーンの相互関係を見ながら、画面遷移とかいろんなコトをコードに書かずに実現してくれる優れものらしいっすが、僕的には、自分でコードを書くのが好きなので、使わないことにします。

Automatic Reference Counting(以下、ARC)は、その名のとおり、自動でオブジェクトの参照をカウントしてオブジェクトのは期のタイミングを管理してくれる優れものの機能です。

C++ の stl でCOMを使うときに使った_com_ptr_t みたいなものですね。

みやちかんたろうの大冒険では、自分で解放処理をやっていましたが、時の流れに身をまかせ、この機能をONにして開発してみることにします。

Include Unit Tests は、あくまで趣味のプログラミングですので、単体試験C1カバレッジ100% とかを担保するつもりは毛頭ありません。OFFにします。(もちろん、趣味とはいえ品質向上には最大の努力をおこなうつもりです。)

で、設定した結果が以下です。

2013011302003_20130114173723.png



詳しく知りたい方は、アップルの公式のドキュメントがありますので参照してください。

はじめてのiOSアプリケーション

Nextをクリック!

保存するフォルダを選択すると・・・

2013011302004.png

キタ━━━━(゚∀゚)━━━━!!

ふたたび、あの長い長い開発の日々が始まるのかと思うとムネアツです。

続きは次回
スポンサード リンク

Xcodeをアップデートするの巻

iPhoneのアプリの作成を開始します。

iOS6をターゲットにしたいのですが、いまのボクのXcode環境では iOS5.1 までしかターゲットにされていないので、手始めに、Xcodeのアップデートを行います。

現在のバージョンは 4.3.2 です。
XCodeバージョン

今時は App Store からインストールできるようですが、Developer サイトからインストールしたほうがかっこいいような気がするので、そちらからおこないまする。

まずは、AppleのDeveloper の Xcode ダウンロードサイトにアクセス。

XCodeWebSiteTop.png

下の方にスクロールすると、ダウンロードへのリンクがあります。

XCodeDownlaod001.png

いつのまにか、4.5.2 まであがってたんですね。

View Downloads をクリック。

DeveloperLogin.png

ログイン画面が出てきました。Apple ID はけしてありまする。

なんか知らぬ間にログイン画面がかっこよくなってる。いろいろな物事は日々進化しているんですなぁ。

Sign In をポチっと押すと、Downloads for Apple Developers が表示されます。

リストから、Xcode 4.5.2 を探し出してクリックすると、

XCode452ListExpand.png

という画面になります。ボクのMacは、OS X 10.7.5 、つまり、いまだ Lion なんです。

でも、Lion でも動くようですヨカッタヨカッタ。

前回、iOS5 対応のため、Xcode 4.3.2 にアップデートたときは Snow Lepard 非対応だったので、Lion にアップデートしなければいけなかったんで、ちょっと心配してました。

でも、いきなりバイナリをダウンロードしてはいけません。ダウンロードの前にリリースノートを確認しましょう。デベロッパーとしての基本ですね。

Xcode 4.5.2 Release Notes をクリックすると、リリースノートが表示されます。

Xcode452ReleaseNote.png

「この文書は、Xcode 4.5.2 のためのリリースノートを含んでいます。Xcode 4.5.2 での機能の向上と解決された問題が論じられています。」

主な変更点をまとめると、
・何個かバグ直したよ
・iOSの最低バージョンは4.3になったよ
・Interface Builder に機能が追加されたよ

とかですかね。

リリースノートも確認したし、早速ダウンロードだ!!

先程の一覧画面で、「Xcode 4.5.2」リンクをクリックするとダウンロードがいきなり開始されます。

ボクの環境だと15分くらいかかるようです。

うーんなかなか終わらないので、初音ミクのぽっぴっぽーを聞きながら待つこととしましょう。



Y.A.S.A.I love you , so and I love you.

と、5回くらい聞いていると、ダウンロードが終わります。

ダウンロードした xcode4520418508a.dmg をダブルクリックすると・・

XcodeDmgDownload.png

ひらいてるひらいてる。

Xcode452App.png

Xcode.app がひとつだけ入ったフォルダがひらきましたよ。
さてさて、これをどうすればいいのでしょうか。

パターン的に、アプリケーションにドラッグアンドドロップすればいいような気がしますが、すでに Xcode 4.3.2 の Xcode.app が存在しています。

とりあえずバックアップしよう。

Xcode432Backup.png

また、10分くらいかかるので、初音ミクのぽっぴっぽーをry

バックアップが完了したので、ドラッグアンドドロップ!

warningdup.png
しってるしってる。存在するの知ってる。ってことで、置き換えるをクリックすると。
alertInstall001.png
なんかおこられた・・・。
とここで改めて考える。そういえば今、iOS4.0以上で動かなければならないアプリをリリースしていましたので、もしなにか不具合があった場合対応しなければならないのであった。

だから、上書きしてはいけない。同居できるのだろうか。

ちなみに、上の警告は、ググッたところすぐに解決できそうでした。

なので、別の場所にコピーをしてみます。
Xcode452copying.png
おわったので、ダブルクリック。
alertFromInternet.png
Webからダウンロードされましただと・・・。
知ってた。

Xcodeのアイコンがぴょんぴょん跳ねてる。何が起きるというのだ・・・。

ジャンプが大きくなったぞ!!!

SystemComponentInstallation.png

なんかインストールしますって事なので、Install をクリック!

SystemComponentInstalling.png
ドキがムネムネ。
SystemComponentEnd.png
なんかのインストールがおわった!!
XcodeWelcome.png
無事に、Welcome画面が起動しました。
Create a new Xcode project を選択して、開発がやっとスタートできそうでございまする。
XcodeStarted.png

次回から早速、「山田さんの逆襲(仮題)」の開発をスタートします。



スポンサード リンク

Appendix

出演ゲーム

みやちかんたろうの大冒険

↑インストールはこちらから
予告編

21面デモ

ステージ作成

検索フォーム

訪問者

Apple製品紹介

Apple MacBook Air 1.6GHz 13.3インチ MB003J/A

中古価格
¥59,800から
(2013/1/24 06:45時点)

QRコード

QR

メールフォーム

名前:
メール:
件名:
本文:

Extra

プロフィール

みやちかんたろう

Author:みやちかんたろう
種別:きいろいねこ
年齢:10歳
性別:オス
趣味:昆虫採集
twitter:@gatsupport

※このサイトはリンクフリーです。ご自由にリンクしてください。相互リンクもじゃんじゃん募集中です!!

最新記事

最新コメント

最新トラックバック

月別アーカイブ