SlideShare a Scribd company logo
ゲーム開発で学ぶSwift
入門
株式会社BizReach
プロダクトマーケティング本部
山下大輔
自己紹介
・山下大輔(やました だいすけ)
・2015年1月よりビズリーチのiOSエンジニア
・@daisuke0131
・http://www.facebook.com/daisuke0131
・https://github.com/daisuke0131
https://itunes.apple.com/jp/app/haikurasu-ren-cainokyaria/id972002786?mt=8
おしながき
・SpriteKitについて・・・30min
・ハンズオン・・・60min
SpriteKit
・iOS7からサポートされた2Dゲーム用標準framework
->外部のライブラリを入れる必要がない、すぐに使える。
・普通のview(UIView)と組み合わせて使える
->普通のアプリを作っている時にも、目を引くエフェクトなどのちょっとしたところに
も使えるかも
SpriteKit
・以下の4つの構成要素からなる
ノード(SKNode)・・・表示される個々のパーツ
アクション(SKAction)・・動きを表すもの
シーン(SKScene)・・・ゲームの画面(ノードのサブクラス)
ビュー(SKView)・・・アプリ上でSpriteKitを表示するView(UIViewのサブクラス)
シーン
ノード
ノードA
ノードB
ノードの階層関係
シーンをビューに
紐付けることで描画
SpriteKit
・座標系
x
y x
y
(x,y)
(x,y)
SpriteKit 普通のアプリ(UIKit)
・位置の指定方法
(0,0)
(0,0)
SKNode
・ゲーム要素を作るSKNodeのサブクラス
->何かしらを表示する時に元の素材毎に使うクラスを選ぶイメージ。
SKSpriteNode・・・画像を描画。一番便利なやつ
SKEmitterNode・・・パーティクルを表示。面白いやつ。
SKShapeNode・・・図形を描画。
SKVideoNode・・・動画を描画
SKLabelNode・・・文字を描画
SKCropNode・・・子ノードにマスクを適用して切り出す
SKEffectNode・・・子ノードにCore Imageフィルタを適用
SKAction
・SKNodeの動きを作るやつ
->ノードの移動、回転、拡大縮小などの変化を作ることができる
・使い方は、作ったActionをnodeの持つrunAction
 メソッドに渡すだけ
・連続的なActionも渡せるよ!
let action = SKAction.moveByX(…)
node.runAction(action)
let action1 = SKAction.moveByX(…)
let action2 = SKAction.moveByX(…)
let sequenceAction = SKAction.sequence([action1,action2])
node.runAction(sequenceAction)
SKScene
・ゲーム画面。
 ->スタート画面、ゲーム画面、終了画面の単位でSKSceneを作るイメージ
SKView
・SpriteKitを表示するView。
 ->UIViewのサブクラスであることがポイント。普通のアプリの中で普通にView
  として扱える。
ハンズオン
クソゲーハンズオン
ぶどう汁ブシャーッ
要件
・ボール、バー、グレープの要素からなる
・グレープは5回ぶつかると「ブシャーッ」
・グレープ全部「ブシャーッ」するとクリア
・ボールが下に落ちちゃうとゲームオーバー
・ボールは等速運動をする
・ボールはバー、グレープ、画面の端とは完全弾性衝突
物理エンジンの使い方
・SKNodeに定義されているphysicsBodyを設定する
->衝突、重力加速度などの物理効果が有効化
衝突の検出
・検出したいノード同士のphysicsBodyの 
  contactTestBitMaskに0以外の値をセットする。
 ->didBeginContactが呼ばれるようになる
※contactTestBitMaskとcategoryBitMaskの論理積が0以外の
値になると衝突判定
完全弾性衝突ってなんぞや??
・運動エネルギーが保存される衝突
v
v
衝突前 衝突後
・physicsBodyのrestitutionに1.0を設定すればいい
node.physicsBody?.restitution = 1.0
例えば
Step1 プロジェクトの作り方
https://github.com/daisuke0131/GrapePinBall/blob/
master/resources/resources.zip?raw=true
Step2 リソースの登録
https://github.com/daisuke0131/GrapePinBall/blob/
master/resources/resources.zip?raw=true
drag&drop
Step2 リソースの登録
https://github.com/daisuke0131/GrapePinBall/blob/
master/resources/resources.zip?raw=true
Step3 GemaSceneの登録
let scene = GameScene()
let view = self.view as! SKView
view.showsFPS = true
view.showsNodeCount = true
scene.size = view.frame.size
view.presentScene(scene)
・GameViewControllerのviewDidLoadに
Step4 ノードの表示と物理効果
let ball = SKSpriteNode(imageNamed: “ball”)
ball.physicsBody = SKPhysicsBody(texture:
SKTexture(imageNamed:"ball"), size: ball.size)
ball.position = CGPoint(x:100 ,y:100)
self.addChild(ball)
・GameSceneのdidMoveToViewに
ボール、バー、ボードを表示するように設定していきます。
Step5 Swiftのちょっとした文法
class Grape:SKSpriteNode {
var hitCount:Int = 0
}
・クラスの継承
・データ構造
let grapesPosition:[(x:CGFloat,y:CGFloat)] = [(60.0,500.0),
(160.0,500.0),(260.0,500.0),(110.0,400.0),(220.0,400.0)]
配列、タプル
・繰り返し
//グレープの配置
for pos in grapesPosition{
makeGrape(pos)
}
Step6 physicsBodyのプロパティ設定
restitution・・・反発係数(ぶつかった時の跳ね返り率)
linearDamping・・・移動時の減衰率(空気抵抗的なやつ)
friction・・・摩擦係数
affectedByGravity・・・重力の影響を受けるかどうか
dynamic・・・動くようにするかどうか。(falseだと衝突も無視)
applyImpulse()・・・衝撃を与えることができる。
Step7 タッチ系イベントハンドリング
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
if let touch: AnyObject = touches.first {
let location = touch.locationInNode(self)
let action = SKAction.moveTo(CGPoint(x: location.x, y: 100), duration: 0.2)
self.board.runAction(action)
}
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
if let touch: AnyObject = touches.first {
if !isStarted{
startBall()
isStarted = true
}
}
}
Step8 衝突判定
self.physicsWorld.contactDelegate = self
extension GameScene:SKPhysicsContactDelegate{
func didBeginContact(contact: SKPhysicsContact) {
}
}
delegateの設定
以下のメソッドを追加することで衝突時に呼ばれる
※contactTestBitMaskとcategoryBitMaskの論理積が0以外の
値になると衝突判定
Step9 パーティクル
Step9 パーティクル
let particle = SKEmitterNode(fileNamed: "MyParticle.sks")
self.addChild(particle)
let removeAction = SKAction.removeFromParent()
let durationAction = SKAction.waitForDuration(1)
let sequenceAction = SKAction.sequence([durationAction,removeAction])
particle.runAction(sequenceAction)
particle.position = CGPoint(x: g.position.x, y: g.position.y)
particle.alpha = 1
おしまい

More Related Content

PPTX
プログラマがUnityでSTGを作った話
PDF
「宴」実装時に得られたUnityプログラムノウハウ
PDF
Scene操作系のエディター拡張Util2セット
PDF
Unity Introduction from 2D shooting game.
PDF
GGJ登録マニュアル
PDF
「宴」まとめ(2016年7月23UniBoookLT大会)
PPTX
ゼロからのエンジニアが開発マネージャーになるまで
PDF
unityゲーム開発基礎講座
プログラマがUnityでSTGを作った話
「宴」実装時に得られたUnityプログラムノウハウ
Scene操作系のエディター拡張Util2セット
Unity Introduction from 2D shooting game.
GGJ登録マニュアル
「宴」まとめ(2016年7月23UniBoookLT大会)
ゼロからのエンジニアが開発マネージャーになるまで
unityゲーム開発基礎講座

What's hot (20)

PDF
Zombi・Hazard 360度ゾンビシューティングゲーム紹介
PPTX
GGJ16 Seminer
PDF
Unity+Vuforia でARアプリを作ってみよう
PDF
【 #Unity会 】このUnityがすごい2015年版
PDF
歩ける全天球動画の実験
PPTX
Azure 三つ巴チームが送るIgnite 振り返り!
PPTX
スマホでVRコンテンツを作る方法
PDF
Unity+Vuforiaで始めるARアプリ開発
PPTX
xR転職合同相談会 2019/05/17
ODP
Unity入門講座その1
PDF
Unity × graphics × effects
PDF
ARコンテンツ作成勉強会:UnityとVuforiaではじめるAR [主要部分]
PDF
Oculus rift入門
PPTX
講義用Ppt windows女子部
PPTX
はじめてのUnity教室 講義用ppt
PPTX
ゲームエンジンの知能化のためのソフトウェアデザイン
PDF
GGJ2016ゲームサブミッション
PDF
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
PPTX
Jaws ug yokoyama-16
PDF
Unity2DとNewGUIについて
Zombi・Hazard 360度ゾンビシューティングゲーム紹介
GGJ16 Seminer
Unity+Vuforia でARアプリを作ってみよう
【 #Unity会 】このUnityがすごい2015年版
歩ける全天球動画の実験
Azure 三つ巴チームが送るIgnite 振り返り!
スマホでVRコンテンツを作る方法
Unity+Vuforiaで始めるARアプリ開発
xR転職合同相談会 2019/05/17
Unity入門講座その1
Unity × graphics × effects
ARコンテンツ作成勉強会:UnityとVuforiaではじめるAR [主要部分]
Oculus rift入門
講義用Ppt windows女子部
はじめてのUnity教室 講義用ppt
ゲームエンジンの知能化のためのソフトウェアデザイン
GGJ2016ゲームサブミッション
大規模フロントエンドのクリーンアーキテクチャ化 ~ 年間売上1,000億円企業モノタロウの取組み ~
Jaws ug yokoyama-16
Unity2DとNewGUIについて
Ad

Similar to Introduction of Swift from Game Development (19)

PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PDF
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
PDF
iOS 8/Swift エンジニア勉強会@ヤフー
PPTX
ノンエンジニアが手探りでシューティングゲームを作った話。Swiftで。その入り口部分。
PDF
ようこそ! Swift Playgroundsへ
PDF
Sprite kitでの横スクロールジャンプ アクションゲーム開発
PDF
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
PDF
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
PDF
Storyboard
PDF
Sig App4
PDF
Swift Study Vol.4
PPTX
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
PPTX
第三回 iOSアプリ勉強会
PDF
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
PDF
Storyboard
PDF
iPhone develop for Beginner
PDF
Swiftアプリ制作入門 かんたんシューティングゲーム
PDF
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
PDF
Unity 2D 逆引き辞典 for Beginners
iPhoneアプリ開発の歩き方〜Swift編〜
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
iOS 8/Swift エンジニア勉強会@ヤフー
ノンエンジニアが手探りでシューティングゲームを作った話。Swiftで。その入り口部分。
ようこそ! Swift Playgroundsへ
Sprite kitでの横スクロールジャンプ アクションゲーム開発
Railsしかやってなかった人が10時間で Swift iOSゲームをつくったら
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
Storyboard
Sig App4
Swift Study Vol.4
Swift (with SceneKit) で簡単な3Dゲームを作ってみた
第三回 iOSアプリ勉強会
enchant.jsでゲーム制作をはじめてみよう 「パンダの会」バージョン
Storyboard
iPhone develop for Beginner
Swiftアプリ制作入門 かんたんシューティングゲーム
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
Unity 2D 逆引き辞典 for Beginners
Ad

More from Daisuke Yamashita (17)

PDF
potatotips_77.pdf
PDF
State management for ios development
PDF
Static analysis for go lang
PDF
Convert the notification feature to the notification microservice
PDF
歯磨き.go #2
PDF
歯磨き.go Go言語の静的解析とコード生成勉強会
PDF
ライブラリを作って5年たったので振り返る
PDF
Tensorflow
PDF
Introduction of ios-chart in oss-labs#3
PDF
About SnapKit - Open source lab -
PDF
View Monitoring Tips
PDF
Swift open source library - ViewMonitor -
PDF
Let's Start Swift Open Source Activity.
PDF
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
PDF
OpenCV on mobile
PDF
Introduction of Swift from Machine Learning
PDF
How to measure UIView position on Native App
potatotips_77.pdf
State management for ios development
Static analysis for go lang
Convert the notification feature to the notification microservice
歯磨き.go #2
歯磨き.go Go言語の静的解析とコード生成勉強会
ライブラリを作って5年たったので振り返る
Tensorflow
Introduction of ios-chart in oss-labs#3
About SnapKit - Open source lab -
View Monitoring Tips
Swift open source library - ViewMonitor -
Let's Start Swift Open Source Activity.
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
OpenCV on mobile
Introduction of Swift from Machine Learning
How to measure UIView position on Native App

Introduction of Swift from Game Development