「ゾンビ撃て」をswift3.0で守破る! Part.2

守破る(しゅはる)!

 

このタイトルでは、日本での茶道や武道における師弟関係のあり方の一つである「守破離(しゅはり)」を使った技術ログの企画です。

リリースされているアプリの一部を真似してみて(守の部分)、最後に少しだけアレンジ(破の部分)してみます。ただし、利用する画像やアイコンは著作権もあるためナマケモノにしていきます。また、ゲームのストーリーも勝手に変えていきます。

namakemono_frontオリジナルのアプリを作成することが守破離の「離の部分」に該当しますが、この企画ではそこ手前で終わるようにします。ぜひ、みなさんでオリジナルを作ってみてください。

前回の「「ゾンビ撃て」をswift3.0で守破る! Part.1」では、Xcodeでプロジェクトを作成してからキャラクターの配置までを行いました。

スクリーンショット 2017-06-06 22.44.01

 

この記事では、下記の項目を実装します。

  • ナマケモノを3列にする
  • ナマケモノの配置をランダムにする
  • 枕をタップするとナマケモノが消えるようにする
  • 正解した場合「コンボ!』という文字を表示する
  • タップを間違えるとナマケモノが回転する

 

 

 

 

守破るアプリ

 

守破るアプリは、「ゾンビ撃て」です!

ShotZombie
Developer: capsule+
Price: Free
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot
  • ShotZombie Screenshot

ゾンビ撃てでは、タップしてゾンビを倒していきます。この部分を守破りたいと思います。

 

 

 

 

 

ナマケモノを3列にする

 

まずは、この記事で必要となる変数やNodeを最初に定義しておきましょう。

didMove関数の上に追記します。

 

ナマケモノを3列に配置するためにナマケモノをコピーして並べます。

コピーには、下記のコードが必要です。

左上に新しくコピーされたナマケモノが現れました。

 

 

このコピー機能を使って、3列にします。

スクリーンショット 2017-06-22 4.23.36

 

 

ナマケモノが3列になりましたね。しかし、最初に付け加えたナマケモノの上にコピーされたナマケモノが重なってしまいました。self.addChild()をする順番で表示されるためオリジナルのナマケモノを外します。

スクリーンショット 2017-06-22 4.32.57

 

 

 

 

ナマケモノの配置をランダムにする

 

3列に配置できたため、連続でナマケモノが上から並び3列をランダムで配置するようにしたいと思います。先程3列にした部分を変更して、for文を使います。

swift3.0になりfor文の書き方が、C言語のようにできなくなりました。参考リンク

また、「arc4random() % 3」で0~2の値をランダムで取得します。

スクリーンショット 2017-06-22 4.46.38

 

 

重要なのは、-player_copy.size.height * CGFloat(i)を使って、ナマケモノのサイズ分下に配置することで、ナマケモノが重ならないようにしています。

 

 

 

枕をタップするとナマケモノが消えるようにする

 

具体的には、次のような流れとします。

  1. 枕をタップする
  2. タップした枕が一番下のナマケモノの列と同じか判断する
  3. 2で判断したナマケモノを一番上の3列のどれかにランダムに置いて、全てのナマケモノを一個分下に下げる

 

 

枕をタップする

枕のタップには、 touchBegan関数を使います。これは、タップされた瞬間に開始される関数です。他にもタップを離した時に開始される関数など様々にあります。

 

 

タップした枕が一番下のナマケモノの列と同じか判断する

ナマケモノの一番下の位置y座標を取得します。最初に配置した後、ナマケモノは自身1個分ずつしか下がらないため、ナマケモノの一番下の位置は変わりません。そこで、初期配置の時に取得します。

 

 

2で判断したナマケモノを一番上の3列のどれかにランダムに置いて、全てのナマケモノを一個分下に下げる

一番下のy座標を取得できたので、次にタップされたキャラクターが「枕」で一番下のナマケモノと同じ列だった場合、一番上に移動するようにします。タップが成功した時にsuccess_tap()という自作関数を実行するようにしました。

 

 

 

自作関数success_tap()では、一番上にナマケモノを移動して、画面全体のNodeでnamakemonoとnameが設定されているものをナマケモノ一個分下に移動するようにしました。

 

 

 

 

正解した場合「コンボ!」という文字を表示する

 

コンボを作る際に必要なのは、下記の2つです。

  • 文字を表示するラベル(combo_text)
  • 何コンボなのかを保持する変数(combo)

最初didMove()の時に、内容は空(“”)にしてフォントの大きさや表示する場所を追記します。

 

 

タップが成功した時に、コンボ(combo)を増やして文字列を入れます。

 

 

タップを間違えた時には、コンボの文字列の中身を空にします。

スクリーンショット 2017-06-22 6.06.23

 

 

タップを間違えるとナマケモノが回転する

タップを間違えるとナマケモノを左に一回転できるようにします。

GameSpriteでは、アニメーションをSKActionというアクションで変数を定義して、その中にどんなアクションにするかを設定します。そして、動いて欲しい時に、Node.run(SKActionの名前)で動かすことできます。

今回は、最初で定義したsprite_moveをdidMove時にどんな動きにするかをプログラムします。

 

 

回転をプログラムした後、失敗する時に組み込みます。

スクリーンショット 2017-06-22 6.16.42

 

 

 

 

まとめ

 

いかがでしたか?最後まで見ていただきありがとうございます。

制限時間などは、まだ実装していませんがタップしてコンボまでを説明しました。

かなり分量が多く説明が口説くなってしまいました。文中でエラーなどありましたらブログへのコメントかGitHubの方でコメントいただけると嬉しいです。

GitHub – zombi_ute

次回は、守破の「破」として少しオリジナル要素を付け加えたいと思います。

 

 

 


Sponsored Link

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です