用Swift實現的FlappyBird小游戲

jopen 10年前發布 | 39K 次閱讀 Apple Swift開發 FlappyBird

用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!
                t+=0.025
            }else{
                isDowm=false
            }
        }
    }

  游戲效果圖如下:

用Swift實現的FlappyBird小游戲


用Swift實現的FlappyBird小游戲

我相信,實踐是學習的必經途徑,希望與志同道合的朋友,一起進步。

項目github地址:https://github.com/ZYHshao/swiftFlappyBird

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!