SWIFTでFlappyBirdのクローンが動かない

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

SWIFTの勉強用FlappyBirdのクローン「FlappySwift」が最新のXcode 6.0.1で動かない場合の修正箇所

Appleが公開したiOS向け新プログラミング言語「SWIFT」。

プログラムの基本である「真似ぶ」ということで、GitHubに公開されている半日くらいでFlappy Birdのクローンが書けたというFlappyBirdのクローン「FlappySwift」を(画面右下の「Download ZIP」より)ダウンロード、OS X Mavericks(10.9.5)のXcode6.0.1でおもむろにコンパイルしたところ、いきなり20個以上のエラーが出ました。

↓こんなの

pipeDown.physicsBody = SKPhysicsBody(rectangleOfSize: pipeDown.size)
pipeDown.physicsBody.dynamic = false        ! "SKPhysicsBody?" does not have a member named 'dynamic'
pipeDown.physicsBody.categoryBitMask = pipeCategory      ! "SKPhysicsBody?" does not have a member named 'categoryBitMask'
pipeDown.physicsBody.contactTestBitMask = birdCategory     ! "SKPhysicsBody?" does not have a member named 'contactTestBitMask'
pipePair.addChild(pipeDown)

右も左もわからないなか、泣きそうになったのですが、大きく2点を直したら動きました。

  1. エラー行の”physicsBody”の後ろに「?」を加える
  2. 最後のエラー箇所の行は”physicsBody”の後ろに「!」を加える

情報元:Why your Swift apps broke in Xcode 6 beta 7 and the GM versions, and how to fix them(Xcode6β7でSwiftアプリが壊れる)

具体的には下記のように「?」を加えます。

pipeDown.physicsBody = SKPhysicsBody(rectangleOfSize: pipeDown.size)
pipeDown.physicsBody?.dynamic = false
pipeDown.physicsBody?.categoryBitMask = pipeCategory
pipeDown.physicsBody?.contactTestBitMask = birdCategory
pipePair.addChild(pipeDown)

まずは根性で、これらのエラー箇所に「?」を加えます。すると、一カ所だけエラーが解決されず、下記エラーになるところがあります。

Value of optional type 'CGFloat?' not unwrapped; did you mean to use '!' or '?'?

具体的にはここ

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
bird.zRotation = self.clamp( -1, max: 0.5, value: bird.physicsBody.velocity.dy * ( bird.physicsBody.velocity.dy < 0 ? 0.003 : 0.001 ) )
}

上記を、今度は「!」を下記のように加えて修正します。

override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
bird.zRotation = self.clamp( -1, max: 0.5, value: bird.physicsBody!.velocity.dy * ( bird.physicsBody!.velocity.dy < 0 ? 0.003 : 0.001 ) )
}

さぁ、おもむろにコンパイルしてみましょう。実行されましたでしょうか。


スポンサーリンク
レクタングル(大)広告