6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cocos2d v3 SpriteBuilderでアニメーションを作る

Last updated at Posted at 2015-05-29

前回まで

今回のゴール

SpriteBuilderで気球が揺れるアニメーションを作ります。
今回はプログラムコードを触ることはありません。

画像を追加します

1.png

この図のようにimagesを追加します。

このサイトから白黒の気球画像を取得します。
利用規約

取得した気球の画像をballoon.pngとして保存して先ほど作ったフォルダにドラッグ&ドロップを行います。

注意)
本当はゲームに合わせて画像サイズを変えるべきだが、今回はチュートリアルなのでそのまま進めます。

2.png

アニメーションを付与するNodeを用意します

上記同様にPartsというフォルダーを追加します。
今回のアプリは規模が小さいので、このPartsフォルダにはSpriteやLayerなどを格納していきます。

3.png

Partsフォルダに新たなNodeを追加します。
図のようにBalloonNode.ccbを入力してNodeを選択して作成してください。

作成したBalloonNodeに対して上記で追加したballoon.pngを追加してください。

4.png

追加したら下図のようにAnchor point0.50.7に変更してください。

5.png

このアンカーポイントを中心に気球が左右に揺れるアニメーションを作りますので挙動がおかしいなどがあった場合はこのAnchor pointを変更します。(後述)

障害物の作成

今回のゲームは揺れる気球を撃ち落とすゲームを作ってます。
最後にご紹介しますが、本日Apple審査を追加したSpace Debrisというゲームの難易度を上げた(?)ものになります。
作っているゲームのイメージが付くので、良ければゲームを一度やってみてもらえればと思います。

Space Debrisとは

Space Debrisは人工衛星同士が衝突して地球に向かってくる場合や地球に近づきすぎた人工衛星をフリックで撃ち落とし地球を守るゲームでした。

今回のゲームはバルーンショット

今回はバルーンショット(バルーンファイトと名付けて目を引きたいところだがw。知っている人はあまりいないかもしれないw)というゲームで落ちてくる気球を撃ち落とすゲームを考えている。
しかし、そのまま気球を撃ち落とすだけでは物足りないので障害物を付けて気球に玉を当てにくい状況を作ろうとしています。

障害物の配置

6.png

今回の配置は難易度が高いです。
まず、図の1のようにCCNodeを追加します。
追加した後に図の2のようにballoonの配下にCCNodeを配置します。
※SpriteBuilderでは所有者をネスト形式で表すことができます。

最後に図の3のようにPositionContent sizeを変更して気球の乗り物部分に合わせます。

気球の当たり判定について

7.png

上記と同様にCCNodeを配置します。
気球の真ん中あたりに300x300くらいのサイズで配置してください。
balloonの配下に配置するのを忘れないようにしましょう!

CCSpriteにはRotationが付けれなかった

準備は整いました。
いよいよ本題のアニメーションをつけます。
SpriteBuilderを使ってない時はこのように自前でアニメーションを作ってました。
しかし、SpriteBuilderを使ってからはアニメーションやParticle(もう少ししたら紹介します)の作成が格段に楽に作れるようになりました。

早速アニメーションを作ろうと思ったのですが、Spriteに対してはRotationが作れませんでした。
(プログラムからは作れるのに・・・何でだろう?)
理由はわかりませんが、CCNodeの中に入れればRotationはできるので修正します。

8.png
先ほど設定した内容を赤丸のようにクリアします。
これはCCNodeの中に入れる時に座標位置を調整するのが面倒になるために行ってます。
下記に追加するCCNodeの中に入れれば設定内容は気にしなくても構いません。

9.png
アニメーションをするためのCCNodeを追加してballoonと同じサイズにします。
そして、balloonを今追加したCCNodeの配下に配置します。
全てが終わると、上記の画面のようになっているはずです。
(説明を随分端折ってますので、わからなければコメントください。)

さて、アニメーションの準備ができました。

アニメーションをつけます

予定外な事がありましたが、今日の本題にやっとたどり着けました。
やっと気球を動かせる準備が揃いましたので、早速進めていきましょう。

時間間隔を設定する画面を呼び出します。

10.png
赤丸の部分をクリック後に「Set Timeline Duration...」を選択してください。

11.png
secsを2秒に設定します。(画像の10の部分を2に変更します。)

12.png
先ほど追加したCCNodeに対してRotationを追加します。

13.png
こちらの青い線を動かします。
この地点が0.5秒後の状態になります。

12.png
上記と同様の方法でRotationを追加します。

14.png
追加した後に、赤丸の中にあるボタン(?)のようなものがあるのでクリックします。
そして、そこの中を30に変更します。
気球の画像が傾いたことがわかると思います。

同様に1.5秒後にもRotationを追加して-30を設定してください。
最後に2秒後にRotationを追加して0を設定してください。

15.png
最終的にこのような形になっていればOKです!

アニメーションさせてみます。

では作ったアニメーションを実行します。

16.png
1番目の繰り返しにチェックを入れて2番の実行を押してください。
アニメーションされることがわかります。

・・・が、想定している動作とは違いますね。
RotationAnchor pointを中心に行われるからになります。

現在アニメーションしているCCNodeを選択してAnchor pointを適切な値に変更します。

17.png
図を見ればわかると思いますが、図のようにAnchor pointを(0.5, 0.7)に設定してください。
設定すると気球が左下あたりに移動するので画面をスクロールさせて気球を真ん中にしましょう!
その後アニメーションを行うと気球が揺れているアニメーションが見れると思います。

早すぎる?

気球の振り子が早すぎる気もしますね。
後は実際にゲームをしながら気球の揺れを調整していきましょう。
今回はこのままとします。

さて、ここまでの状態を保存しておきましょう!
次回はいよいよiPhoneシミュレーター上に気球を登場させます!

Anchor pointってなに?

さらっとAnchor Pointを出しましたが、これはなんでしょうか?
これは各Nodeの基準点を設定できるものです。

例えば、XCodeでUIViewを設置すると左上が起点となります。
これをCocos2dで示す場合はAnchor Pointを(0, 1)にすると左上が起点になります。

そうです。
Cocoaではこの起点が必ず左上になってましたが、Cocos2dでは起点値を自由に変えれるのです。
※デフォルトである(0, 0)は左下で、Cocoa(左上)とは違いますので座標計算をする時には注意してください。

CCSpriteの基準点

ゲームではオブジェクト同士の計算が頻繁に発生するので基準点は(0, 0)よりも(0.5, 0.5)の画像の中心の方が計算しやすいケースが多い。
そのためか、CCSpriteの場合は初期値が(0.5, 0.5)になってます。

Apple申請が通りました!

今作っているゲームは本日(2015/5/28)にアップル申請が通った

id995207358.png
Space Debris
というゲームと同じ感じのゲームになりますので、完成イメージをつける為にも是非DLLしてみてください!

また、このゲームは全てSwiftで作成しています。
Swiftで作成した僕の初めてのゲームになります。
DLLよろしくお願いいたします♪

作成日記はこちら
7日でiPhoneアプリ(Swift)を作ってみた

次回は

次回はSpriteBuilderで作ったオブジェクトをシミュレータに表示するです。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?