初心者から始める横スクロールゲームアプリの作り方(3/4)

【動作環境】

Swift2.0 Xcode7.0 

【対象レベル】

超初心者

【学習内容】

ネコのオリジナルキャラクターが横に向かって走り、

障害物をジャンプして回避するアプリを作ります。

障害物に当たると、ゲームオーバーする機能を実装します。

【再生時間】

15:50


動画の音声の書き起こし

1 2 3 4 

Tekuruプログラミングスクールでは、

動画だけでは伝わりきらない、アプリ開発の楽しさや、

気軽に質問できる雰囲気で、プログラミングを学ぶことができます。

もっと深く、プログラミングを理解したい方は、ぜひ無料体験にお越しください。

 

どこよりも楽しく学べるアプリ開発スクールを運営しています。

フォローしてしてくれると、とてもうれしいです☆

Facebook

https://www.facebook.com/techool

 

Twitter

https://twitter.com/TekuruSchool

 

YouTubeチャンネル

https://www.youtube.com/channel/UCpQfWE0TpewbXYnGyxxBkow

 

毎週土曜日の夜に動画のアップロードをしています。

よければ、チャンネル登録お願いします!

ソースコードや、操作の仕方、などなど、

なんでも気軽にコメントください。

 

コメントをお書きください

コメント: 3
  • #1

    Ray (土曜日, 03 3月 2018 17:39)

    swift4を使っていてこのゲームを作ってみようと思い、進めているのですが
    for i in 0...enemyArray.count {
    let enemy = enemyArray[i] ←ここでThread 1: Fatal error: Index out of rangeというエラー
    enemy.center = CGPoint(x:enemy.center.x-5,y:enemy.center.y)
    if(enemy.center.x < -enemy.frame.size.width){
    enemy.removeFromSuperview()
    enemyArray.remove(at:i)
    }
    let dx = enemy.center.x - player.center.x
    let dy = enemy.center.y - player.center.y
    let distance = sqrt(dx*dx + dy*dy)
    if distance < 40 {
    gameOver()
    break
    }
    }
    どう直せば宜しいでしょうか
    まだ初心者で分からないことが多いので教えて頂けると嬉しいです。

  • #2

    Tekuru 運営 (金曜日, 09 3月 2018 17:42)

    Ray さま
    メッセージありがとうございます!

    こちらに、Swift4 で動作するコードを作成いたしました。
    https://drive.google.com/drive/folders/1IHquIl1ufnBGmFSx5kmMLYEzm1NbeuIX
    ご確認いただけましたらと思います。

    ※ただし、3/4までのコードです。
    4以降は、使用不可能なフレームワークがあると思います。

    「エラー: index out of range」の原因は、配列の基本的なことでした。

    for i in 0...enemyArray.count { ... }
    と記述すると、ループは 0 から配列の要素数になります。

    enemyArrayの要素数が5個だった場合は、0 ~ 5です。
    要素番号は、[0, 1, 2, 3, 4]です。
    enemyArray[ i ]が実行されると、最後の要素番号iは 4 であるべきなのに 5 が入ってしまうためにエラーが発生します。

    ここだけ、変更してもいけるかと思います。
    for enemy in enemyArray {
    enemy.center = CGPoint(x: enemy.center.x-5, y: enemy.center.y)
    if enemy.center.x < -enemy.frame.size.width {
    enemy.removeFromSuperview()
    let i = enemyArray.index(of: enemy)!
    enemyArray.remove(at: i)
    }

    let dx = enemy.center.x - player.center.x
    let dy = enemy.center.y - player.center.y
    let distance = sqrt(dx*dx + dy*dy)
    if distance < 40 {
    gameOver()
    break
    }
    }

  • #3

    Tekuru 運営 (金曜日, 09 3月 2018 17:43)

    今回の範囲の、配列についての知識は、
    私たちTekuru の講師メンバーが執筆した書籍にて詳しく解説させていただいておりまして、
    新井ちの「Swift3でプログラミングをはじめよう(Array編)」https://itunes.apple.com/jp/book/swift3%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-array%E7%B7%A8/id1181888671?mt=11

    をご覧いただけますと、配列の知識が深く習得できるかと思います。
    ぜひご参考いただけましたらと思います。