Swiftで実装したFlappyBirdミニゲーム
Apple社のSwiftに対するプロモーション姿勢の深化に伴い、Swiftは急速に人気が高まっており、Swiftの簡潔で便利な文法と強力な機能は、Object—Cを使ってiOS開発を行っている開発者にとっても、Swiftを学んでおく必要があります。本稿ではSwiftのとっつきにくい文法を飛ばして、直接小さなゲームプロジェクトからSwiftを使い始め、その中で得られたものを以下のようにまとめます:
FlappyBirdは先日とても人気があったミニゲームで、指で画面をタップして鳥のバランスを取りながら障害物を通過します。私は以前のOC版のプロジェクトを改造してSwiftにしたので、全体的な考え方はOCの開発方針です。
まず、マクロを2つ定義する必要があります。1つは重力加速度Gをシミュレートするため、もう1つはデバイスの画面サイズを便利に取得するためです。このゲームは非常にシンプルなので、開発にも数時間しかかからず、1つのファイルにコードを書くだけで済みます:viewController.swift。
Swiftには一般的な言語にあるようなマクロ定義はありませんが、定数を定義する形でマクロの効果を実現できます:
//用常量的形式代理OC中的宏定义 let G:Float=9.8 let SCREEN_SIZE = UIScreen.mainScreen().bounds
いくつかのメンバー変数を定義する必要があります。以下の通りです:
class ViewController: UIViewController {
var timer:NSTimer?//背景移动的定时器
var i:Int=0//背景移动的速度
var timer2:NSTimer?//柱子和地面移动的定时器
var timer3:NSTimer?//小鸟移动的定时器
var bird:UIImageView?
var t:Float=0.0//小鸟下落的速度
var isDowm:Bool=false//标记小鸟是否在下落
var isGameOver:Bool=false//标记是否游戏结束
}
?と!の記号の理解については、ネット上に多くの概念がありますが、簡単に理解すると、変数を宣言する際に初期化しない場合、システムは変数にnilを代入せずエラーになります。?の役割は、ここが初期化されていなければnilであることをシステムに伝えることです。同様に、このような変数を使う際にも、?を付けてアンラップする必要があります。!を付けると強制アンラップで、この変数が必ずnilではないとシステムに認識させることだと理解できます。
UIの作成などの部分の関数はOCと同じで、ただ呼び出し方が少し異なるだけで、後でソースコードを添付します。
鳥の落下を制御する部分のコードは以下の通りです。その中で注意すべき点が1つあります。Swiftには暗黙的な変換という概念はなく、例えばint a + float bを使いたい場合は、手動でintをfloatに変換する必要があります:(Float)(a)+b
func birdMove(){
if !isDowm{
if bird?.frame.origin.y < SCREEN_SIZE.height-100{
var rant:CGRect=bird!.frame
rant.origin.y += (CGFloat)(G*(t*t/2))
bird?.frame=rant
t+=0.025
}
}else{
if t<0.24{
var rant = bird?.frame
rant?.origin.y -= 4.9-(CGFloat)(G*t*t/2)
bird?.frame=rant!
t+=0.025
}else{
isDowm=false
}
}
}
ゲームの効果図は以下の通り:


私は、実践こそが学習の必经の道であると信じています。志を同じくする友人たちと一緒に、共に成長していきたいと思います。
プロジェクトのgithubアドレス:https://github.com/ZYHshao/swiftFlappyBird
拓展阅读
Swift入門チュートリアル:http://www.w3cschool.cc/w3cnote/apple-swift.html