伴隨着apple公司對swift的推廣態度深刻,swift火的很快,而且swift精簡便捷的語法和強大的功能,對於使用Object—C開發iOS的開發者來講,也有必要了解學習一下swift。這篇博客跳過swift乾澀的語法,直接從一個小遊戲項目開始使用swift,將其中收穫總結以下:git
FlappyBird是前段時間很火的一款小遊戲,經過手指點擊屏幕平衡小鳥經過障礙。我是將之前OC版的項目拿來改爲了swift,因此總體的思路仍是OC的開發思路。github
首先,我須要定義兩個宏,一個用來模擬重力加速度G,一個用來便捷獲取設備屏幕尺寸。由於這個遊戲很是簡單,開發起來也只須要幾個小時,因此咱們只須要在一個文件中寫代碼:viewController.swift。swift
swift中沒有通常語言中的宏定義,可是能夠經過定義常量的形式實現宏的效果:app
//用常量的形式代理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同樣,只是調用的方式略有不一樣,後面會附上源碼。spa
在控制小鳥下落的部分代碼以下,其中有一點須要注意,在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 } } }
遊戲效果圖以下:code
我相信,實踐是學習的必經途徑,但願與志同道合的朋友,一塊兒進步。遊戲
項目github地址:https://github.com/ZYHshao/swiftFlappyBird
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592