「SpriteKitではじめる2Dゲームプログラミング Swift対応」を Swift 3.1 に対応させる

2018年8月4日ITSwift

こんにちは、ハラダ(@nobuhiro_harada)です

現在 Swift を勉強中なのですが、Swift は 2 → 3 にバージョンアップした際に大きく仕様が変わったので、

こちらの Swift 2 対応の本の1つめのアプリ「積み上げゲーム」をSwift 3 に対応させてみました

デモ

といっても、Xcodeがエラーを教えてくれるので、ほとんどそれに従って進めればよかったです

P.93

let view = self.view as SKView

let view = self.view as! SKView

 

p.97

override didMoveToView(view: SKView) {
    // 省略
}

override didMove(to view: SKView) {
    // 省略
}

 

sprite.position = CGPointMake(self.size.width*0.5, self.size.height)

sprite.position = CGPoint(x:self.size.width*0.5, y:self.size.height)

 

P.99

background.position = CGPointMake(self.size.width*0.5, self.size.height*0.5)

background.position = CGPoint(x: self.size.width*0.5, y:self.size.height*0.5)

 
P.103

bowl.physicsBody?.dynamic = false

bowl.physicsBody?.isDynamic = false

 
P.104

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    if let touch: AnyObject = touches.anyObject() {
        let location = touch.locationInNode(self)
        let action = SKAction.moveTo(CGPoint(x: location.x, y: 100), duration: 0.2)
        self.bowl?.runAction(action)
    }
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch: AnyObject in touches {
        let location = touch.location(in: self)
        let action = SKAction.move(to: location, duration: 0.2)
        self.bowl?.run(action)
    }
}

 
P.105
touchesMoved は touchesBegan 同じ修正でよい

P.106

var timer:NSTimer?

var timer:Timer?

 

self.timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: "fallNagoyaSpecialty", userInfo: nil, repeats: true)

self.timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(GameScene.fallNagoyaSpecialty), userInfo: nil, repeats: true)

 
P.108

sprite.position = CGPointMake(self.size.width*0.5, self.size.height)

sprite.position = CGPoint(x:self.size.width*0.5, y:self.size.height)

 
P.110

var lowestShape:SKShapeNode?

var lowestShape:SKNode?

 

let lowestShape = SKShapeNode(rectOfSize: CGSize(width: self.size.width * 3, height: 10))

let lowestShape = SKShapeNode(rectOf: CGSize(width: self.size.width * 3, height: 10))

 

let phisicsBody = SKPhysicsBody(rectangleOfSize: lowestShape.frame.size)
phisicsBody.dynamic = false

let phisicsBody = SKPhysicsBody(rectangleOf: lowestShape.frame.size)
phisicsBody.isDynamic = false

 
P.112

func didBeginContact(contact: SKPhysicsContact) {

func didBegin(_ contact: SKPhysicsContact) {

 

self.paused = true

self.isPaused = true

 
P.114

scoreLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Right
scoreLabel.fontColor = UIColor.greenColor

scoreLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.right
scoreLabel.fontColor = UIColor.green

全体的にくどい書き方をしていたのをスッキリさせた印象ですね

こういった修正って、めんどくさくてできれば避けたいものなのですが、逆に、勉強になりますね

実際現場で働いてると、こんなことばかりですし

プログラミングの勉強をはじめたばかりの頃は写経して、エラーが出たら、すぐ投げ出してましたw

スポンサーリンク

Posted by nobuhiro harada