Swift Code in Swift - 2日間でゲームを作ってみた
-
Upload
axsh-co-ltd -
Category
Technology
-
view
8.739 -
download
0
description
Transcript of Swift Code in Swift - 2日間でゲームを作ってみた
![Page 1: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/1.jpg)
「Swiftでゲームを作ってみた2日間」 って話なんですけどね…
株式会社あくしゅ 代表取締役 山崎泰宏
![Page 2: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/2.jpg)
自己紹介
! 山崎泰宏
! 1977年北海道生まれ
! 株式会社あくしゅ 代表取締役 ! 2006年登記、現在新宿南口から徒歩10分くらいのところ ! 従業員13名(2014年6月現在)
![Page 3: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/3.jpg)
基本のドキュメンテーションは英語 会話は必要に応じて英語
Glocalized Company
![Page 4: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/4.jpg)
職場の風景
出社時間決まってないから 朝は誰もいません
![Page 5: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/5.jpg)
開発環境はこんな感じ
![Page 6: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/6.jpg)
飲み会の時間には みんな集まります
![Page 7: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/7.jpg)
ゲームの時間も 出社してくれます
![Page 8: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/8.jpg)
今日はSwiftでゲームを作ってみた って話しますけどね…
![Page 9: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/9.jpg)
iOS と全く関係ない ソフトウェア技術会社です
![Page 10: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/10.jpg)
クラウド基盤ソフトウェア Wakame-‐vdc
![Page 11: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/11.jpg)
仮想ネットワーク技術
OpenFlow 1.3を駆使し 物理ネットワークの上で 仮想ネットワークを 自由自在にオーバレイするもの
![Page 12: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/12.jpg)
データセンターの仮想化を 目指している会社
![Page 13: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/13.jpg)
• Open Source License (LGPL3) • Ruby
![Page 14: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/14.jpg)
山崎の講演や執筆 ! NII (国際情報学研究所)にてクラウド関連講義を担当
今年度からAIITでも非常勤講師になる予定
! 日経コンピュータ(2012/1~2012/3 計7回連載) 「今さら聞けないクラウドコンピューティング」
! その他クラウド関連の記事を 多数執筆
ぜひご購入下さい!
![Page 15: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/15.jpg)
とは言え、個人的には ゲームとか作るのは好き(だった)
![Page 16: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/16.jpg)
大学時代 (16年前) 1年生の時から、 「ネットワーク」+「3次元」の技術に 没頭していた
1998年頃 1年目で作って 学内に公開した 通信対戦ゲーム
![Page 17: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/17.jpg)
OpenGLに手を出す
暇人なのでゲームエンジンとか作ってた。
地味に表現力を上げて行きました
形状 材質
関節 最適化
![Page 18: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/18.jpg)
当時はまだプレステ1の時代
![Page 19: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/19.jpg)
Virtual Sound Horror House (1999)
光と影の表現を加えて、やっとここまで来た…
![Page 20: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/20.jpg)
しかも、Virtual Realityっぽく (1) HMDでぐるぐる見回せる
(3)障害物に当たると Hapticsな感じがする
(2) 3Dサウンドが鳴る
![Page 21: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/21.jpg)
現実空間と融合した方が面白そう
![Page 22: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/22.jpg)
実際の展示風景 (2001年)
![Page 23: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/23.jpg)
物理的な動きで箱の中を表現
![Page 24: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/24.jpg)
遊び心も忘れずに
![Page 25: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/25.jpg)
![Page 26: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/26.jpg)
某教授にそそのかされて
![Page 27: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/27.jpg)
Swiftのセッション やりませんか?
![Page 28: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/28.jpg)
やりませんか?
![Page 29: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/29.jpg)
ゲームプログラミングなんて12年ぶりくらいだよ!
![Page 30: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/30.jpg)
残された学習時間は2日間 (延べだと12時間はある)
![Page 31: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/31.jpg)
Swiftを真面目に勉強すると絶対にバテて死ぬ
![Page 32: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/32.jpg)
生存戦略
![Page 33: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/33.jpg)
とりあえずの方針
! コードリーディングしまくれ! ! Swiftの事なんて知らなくて良いんだ!
気になるところを改造したり、 まずはコピペできるコードを探せ! 自分の知識辞書を作れ!
! 読まないやつは大体書けない ! FlappyBirdモドキのサンプルが素敵だった!
! 悩むな!コードを書け! ! 書きたくなってから文法を調べろ!
![Page 34: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/34.jpg)
FlappySwift
! https://github.com/fullstackio/FlappySwift
神
![Page 35: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/35.jpg)
FlappySwift ! 単純なゲームではあるが、
コードは思っていたより短かった
! SpriteKitと言うゲームエンジンを使っている ! Objective-‐C時代から存在していたものらしい ! シーングラフとイベントベースの制御エンジン ! アクションを巧妙に定義して
アニメーションやスクロールなどをさせている
! 物理演算の機能を使って衝突判定をしている
![Page 36: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/36.jpg)
スクロール
① ②
戻す 戻す
![Page 37: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/37.jpg)
コードにするとこんな感じ 画像のロード
画像幅分だけ左へ移動
画像幅分だけ左へ瞬間移動
これらの動作を 永遠に繰り返す
2枚以上の画像を並べ それぞれにこのアクションを適用する
![Page 38: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/38.jpg)
衝突判定
各キャラクターごとにBounding Areaを設定し、何と衝突検査するかを指定するだけ
衝突したらこの関数が呼ばれるので、 何と何が衝突したのかをif判定すれば良い
![Page 39: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/39.jpg)
移動と操作 このバカな鳥は、重力の影響を受ける
画面のどこかをタッチした瞬間に、 重力方向の速度をキャンセルし、 上向きの力積を与えられ、空中でジャンプする
![Page 40: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/40.jpg)
Swiftって言うか SpriteKitの使い方が分かった感じ。
とてもよく出来てる。
![Page 41: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/41.jpg)
良く言えば、 少なくともSwift読むのは超簡単。
理解できなかったのはSpriteKitの仕様の方。
![Page 42: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/42.jpg)
何を作るか?
左右に走り続ける不憫な男がいるので タップしてジャンプさせる。 空中に浮いているブロックの乗って どんどん上に登っていくゲーム。
ブロックを下からすり抜けて登れるようにしたいので、物理演算に頼らず、自前
の衝突判定を入れた方が良さそう
![Page 43: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/43.jpg)
さあ新規プロジェクトを 作るぞ!
![Page 44: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/44.jpg)
ゲーム用のプロジェクトがあるので、迷わず選択
![Page 45: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/45.jpg)
得意なOpenGLもある! 迷わず選択
※ESはよく知らないんですが
![Page 46: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/46.jpg)
スケルトンコードが出た!
![Page 47: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/47.jpg)
…ん? 全部コメントアウトされてるように見える…
![Page 48: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/48.jpg)
![Page 49: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/49.jpg)
![Page 50: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/50.jpg)
\(T_T)/ 動いてないのかよ! Metalも同じだった
![Page 51: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/51.jpg)
出鼻をくじかれ、 気分が乗らなくなってきた
![Page 52: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/52.jpg)
ので、とりあえず絵を描こう!
![Page 53: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/53.jpg)
取り込んで…
![Page 54: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/54.jpg)
バラバラにして…
![Page 55: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/55.jpg)
背景を抜いて…
![Page 56: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/56.jpg)
大満足♥
![Page 57: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/57.jpg)
FlappySwiftのコードをパクって 参考にして、走るアニメを作成
![Page 58: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/58.jpg)
ここまでで1日終了。 とりあえず翌日に完成したデモをどうぞ
![Page 59: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/59.jpg)
シーンの構成要素
! Man ! 走る人
! Blocks ! 浮かんでいるブロック群
! Background ! 背景
![Page 60: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/60.jpg)
前回処理時間との 差分を出す
基本的には、この差分時間を使って移動距離などを計算する
![Page 61: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/61.jpg)
衝突判定
• Manのx座標がブロックの範囲内で、 y座標がブロック上面より上にあるとき、 移動先がブロック上面より下になる場合に 衝突したと判定する • 衝突したらy座標を固定し、 • 落下のベクトルを0にする
実際はブロックの範囲を少し大きめに取って 判定している
![Page 62: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/62.jpg)
感想とまとめ
! とりあえずゲーム作るのは簡単だった ! 今回やらなかった物理演算も簡単で楽しそう ! 2日間でもそれなりのものが、すぐにできる
! 言語仕様 ! Rubyに近い感じがする ! ? が割りと良さ気
! コンパイルとランタイムでのコードチェックの役割が とても良い感じ
! ゲームライブラリが良く出来てる
![Page 63: Swift Code in Swift - 2日間でゲームを作ってみた](https://reader034.fdocument.pub/reader034/viewer/2022052217/556a5d00d8b42a7a138b511f/html5/thumbnails/63.jpg)
完