連載
iOS 9のReplayKitでゲームプレー動画を撮影&シェア:iOS SDKとSwiftで始めるゲーム作成入門(7)(3/4 ページ)
iPhoneゲームをSwift言語で作成してみたいという初心者向けにiOSのゲームフレームワークを使った作り方を一から解説する入門連載。今回は、ステージを1から3に増やし、出てくる敵の種類もステージに応じて変わるようにします。さらに「ReplayKit」というフレームワークも使ってプレー動画の撮影・共有機能を実装します。
自機のアップグレードや売却ができるようにする
次は自機の売却やアップグレードをできるようにします。仕様は自機をタッチしたらアップグレードと売却を選択できるようにします。
Char.swiftを以下のように修正してください。levelプロパティを追加して、levelに応じて攻撃力が上がるようにしました。
class Char: SKSpriteNode {
override init(texture: SKTexture?, color: UIColor, size: CGSize) {
super.init(texture: texture, color: color, size: size)
userInteractionEnabled = true
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var level = 1
var didTouched: (() -> ())?
// 省略
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
didTouched?()
}
}
class Char1: Char {
// 省略
override var power: Int {
return 1 * level
}
// 省略
}
class Char2: Char {
// 省略
override var power: Int {
return 2 * level
}
// 省略
}
class Char3: Char {
// 省略
override var power: Int {
return 3 * level
}
// 省略
}
続けてSetCharScene.swiftを修正します。
class SetCharScene: SKScene {
// 省略
func createChars(charData: [(factory: CharFactory, position: CGPoint)]) {
charData.forEach {
let char = $0.factory.createChar()
char.position = $0.position
char.physicsBody = SKPhysicsBody(rectangleOfSize: char.size)
addChild(char)
self.charData.append($0)
// 下の4行を追加
let factory = $0.factory
char.didTouched = {
self.charDidTouched(char, factory: factory)
}
}
}
func charDidTouched(char: Char, factory: CharFactory) {
let alert = UIAlertController(title: nil, message: "どのキャラクターを設置しますか?",
preferredStyle: .Alert)
alert.addAction(UIAlertAction(title: "アップグレード", style: .Default, handler: { _ in
self.coin -= char.cost
char.level += 1
}))
alert.addAction(UIAlertAction(title: "売却", style: .Default, handler: { _ in
let index = self.charData.indexOf { $0.factory === factory }!
self.charData.removeAtIndex(index)
self.coin += char.cost / 2
char.removeFromParent()
}))
alert.addAction(UIAlertAction(title: "キャンセル", style: .Cancel, handler: nil))
let rootViewController = UIApplication.sharedApplication().delegate?.window??.rootViewController
rootViewController?.presentViewController(alert, animated: true, completion: nil)
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
if touches.count == 1, let point = touches.first?.locationInNode(self) {
let alert = UIAlertController(title: nil, message: nil,
preferredStyle: .Alert)
let rootViewController = UIApplication.sharedApplication().delegate?.window??.rootViewController
alert.addAction(UIAlertAction(title: "Char1を設置", style: .Default, handler: { _ in
let factory = Char1Factory()
let char = factory.createChar()
char.position = point
self.coin -= char.cost
self.addChild(char)
self.charData.append((factory: factory, position: point))
// 下の3行を追加
char.didTouched = {
self.charDidTouched(char, factory: factory)
}
}))
alert.addAction(UIAlertAction(title: "Char2を設置", style: .Default, handler: { _ in
let factory = Char2Factory()
let char = factory.createChar()
char.position = point
self.coin -= char.cost
self.addChild(char)
self.charData.append((factory: factory, position: point))
// 下の3行を追加
char.didTouched = {
self.charDidTouched(char, factory: factory)
}
}))
alert.addAction(UIAlertAction(title: "Char3を設置", style: .Default, handler: { _ in
let factory = Char3Factory()
let char = Char3()
char.position = point
self.coin -= char.cost
self.addChild(char)
self.charData.append((factory: factory, position: point))
// 下の3行を追加
char.didTouched = {
self.charDidTouched(char, factory: factory)
}
}))
alert.addAction(UIAlertAction(title: "キャンセル", style: .Cancel, handler: nil))
rootViewController?.presentViewController(alert, animated: true, completion: nil)
}
}
}
これで自機のアップグレードや売却ができるようになりました。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
開発者向けiOS 9、WatchOS 2、Swift 2、Xcode 7の新機能と新しいApple Developer Programの参考情報まとめ
iOS 9、WatchOS 2、Swift 2、Xcode 7の新機能や、Apple Developer Programについて、その概要とアップルが公開している参考情報をまとめて紹介します。
Apple WatchやiPhoneのアプリを作ろう! Playgroundで学ぶSwiftの基礎―変数、定数、型、演算
本連載では、これからプログラミングやiPhoneアプリ開発を始めてみたい方を対象に、開発に必要な知識を基礎から解説していきます。今回は、Swiftの変数、定数、型、演算などについてサンプルプログラムを交えて解説します。
iOSアプリ開発でObjective-CからSwiftに移行するための手順、注意点まとめ〜言語仕様の違いは? 連携時の呼び出し方は?
開発生産性や品質を向上させたいiOSアプリ開発者のためにObjective-CからSwiftへ移行するメリットや手順、注意点など勘所をまとめて紹介します。
