Мини-игра FlappyBird, реализованная на Swift
По мере того как Apple всё глубже продвигает Swift, Swift стал очень быстро набирать популярность. Более того, лаконичный и удобный синтаксис Swift и его мощные возможности делают так, что разработчикам, использующим Objective-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
}
}
}
Скриншот игрового эффекта выглядит следующим образом:


Я считаю, что практика — необходимый путь к обучению. Надеюсь прогрессировать вместе с единомышленниками.
Адрес проекта на GitHub:https://github.com/ZYHshao/swiftFlappyBird
Дополнительное чтение
Вводный учебник по Swift:http://www.w3cschool.cc/w3cnote/apple-swift.html