用Swift實作的FlappyBird小遊戲
伴随着apple公司對swift的推廣态度深入,swift火的很快,并且swift精簡便捷的文法和強大的功能,對于使用Object—C開發iOS的開發者來說,也有必要了解學習一下swift。這篇部落格跳過swift幹澀的文法,直接從一個小遊戲項目開始使用swift,将其中收獲總結如下:
FlappyBird是前段時間很火的一款小遊戲,通過手指點選螢幕平衡小鳥通過障礙。我是将以前OC版的項目拿來改成了swift,是以整體的思路還是OC的開發思路。
首先,我需要定義兩個宏,一個用來模拟重力加速度G,一個用來便捷擷取裝置螢幕尺寸。因為這個遊戲非常簡單,開發起來也隻需要幾個小時,是以我們隻需要在一個檔案中寫代碼: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一樣,隻是調用的方式略有不同,後面會附上源碼。
在控制小鳥下落的部分代碼如下,其中有一點需要注意,在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!
}else{
isDowm=false
}
}
遊戲效果圖如下:
我相信,實踐是學習的必經途徑,希望與志同道合的朋友,一起進步。
項目github位址:
https://github.com/ZYHshao/swiftFlappyBird