Swift学习第一练——用Swift实现的FlappyBird小游戏

用Swift实现的FlappyBird小游戏

      伴随着apple公司对swift的推广态度深入,swift火的很快,并且swift精简便捷的语法和强大的功能,对于使用Object—C开发iOS的开发者来说,也有必要了解学习一下swift。这篇博客跳过swift干涩的语法,直接从一个小游戏项目开始使用swift,将其中收获总结如下:

    FlappyBird是前段时间很火的一款小游戏,通过手指点击屏幕平衡小鸟通过障碍。我是将以前OC版的项目拿来改成了swift,所以整体的思路还是OC的开发思路。

    首先,我需要定义两个宏,一个用来模拟重力加速度G,一个用来便捷获取设备屏幕尺寸。因为这个游戏非常简单,开发起来也只需要几个小时,所以我们只需要在一个文件中写代码:viewController.swift。

    swift中没有一般语言中的宏定义,但是可以通过定义常量的形式实现宏的效果:

1//用常量的形式代理OC中的宏定义 2let G:Float=9.8 3let SCREEN_SIZE = UIScreen.mainScreen().bounds

    我们需要定义一些成员变量,如下:

1class ViewController: UIViewController { 2    var timer:NSTimer?//背景移动的定时器 3    var i:Int=0//背景移动的速度 4    var timer2:NSTimer?//柱子和地面移动的定时器 5    var timer3:NSTimer?//小鸟移动的定时器 6    var bird:UIImageView? 7    var t:Float=0.0//小鸟下落的速度 8    var isDowm:Bool=false//标记小鸟是否在下落 9    var isGameOver:Bool=false//标记是否游戏结束 10}

    对于?和!号的理解,网上概念很多,简单理解声明变量时如果不初始化系统是不会给变量赋nil的,会报错,?的作用就是告诉系统这里如果没有初始化就是nil。同理,在用这类变量的时候,也需要加上?解包,如果加!就是强制解包,可以理解为让系统认为这个变量一定不是nil。

    对于UI的创建等部分函数和OC一样,只是调用的方式略有不同,后面会附上源码。

    在控制小鸟下落的部分代码如下,其中有一点需要注意,在swift中没有隐士转换这个概念,比如你要使用int a + float b 你必须手动将int转为float:(Float)(a)+b

1func birdMove(){ 2        if !isDowm{ 3            if bird?.frame.origin.y < SCREEN_SIZE.height-100{ 4                var rant:CGRect=bird!.frame 5                rant.origin.y += (CGFloat)(G*(t*t/2)) 6                bird?.frame=rant 7                t+=0.025 8            } 9        }else{ 10            if t<0.24{ 11                var rant = bird?.frame 12                rant?.origin.y -= 4.9-(CGFloat)(G*t*t/2) 13                bird?.frame=rant! 14                t+=0.025 15            }else{ 16                isDowm=false 17            } 18        } 19    }

  游戏效果图如下:

我相信,实践是学习的必经途径,希望与志同道合的朋友,一起进步。

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

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

点赞
收藏

评论区

加载中...

相关推荐

Swift 简介

Swift和ObjectiveC的主要区别1,编程范式Swift可以面向协议编程、函数式编程、面向对象编程。Swift语言引入了协议、协议的扩展、泛型等新特性,因此使用Swift语言可以很好地面向协议编程;Swift语言将函数和闭包提升为语言的一等公民,函数可以作为一个变量、可以作为其他函数的参数、作为其他函数的返回值等来传递,所以

Swift 简介

1.Swift开发快速体验1.1目标playground快速体验&学习资源分享项目开发快速体验,了解Swift基本程序结构1.2学习资源苹果官方博客https://developer.apple

SwiftUI 实战:从 0 到 1 研发一个 App

心得感悟起初看到WWDC上的演示SwiftUI时,我就觉得SwiftUI有种陌生的熟悉感(声明式语法),所以体验下,看看有没有什么启发。先说下整体项目完成下来的感受:用SwiftSwiftUI开发iOS项目效率很高,本人之前没有接触过Swift语言,这次是从0开始学swift语言以及swi

Swift讲解专题九——枚举

Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关

Swift讲解专题八——闭包

Swift讲解专题八——闭包一、引言      Swift中的闭包是有一定功能的代码块,这十分类似于ObjectiveC中的block语法。Swift中的闭包语法风格十分简洁,其作用和函数的作用相似。二、从一个系统函数看闭包      Swift标准函数库中提供了一个sort排序函数,对

Swift专题讲解二十一——协议

Swift专题讲解二十一——协议一、引言      协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法。Swift中的协议使用protocol关键字来声明。Swift中的协议还有一个十分有意思的特性,协议可以通过扩展来实现一些方法和附加功能。