文档章节

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

珲少
 珲少
发布于 2015/06/11 17:00
字数 737
阅读 4764
收藏 67

用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
            }
        }
    }

  游戏效果图如下:

 

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

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

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

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 874
博文 390
码字总数 469911
作品 0
上海
iOS工程师
私信 提问
加载中

评论(7)

珲少
珲少

引用来自“卧龙小”的评论

楼主,牛掰,H5 SWITF OC 同时开弓,博客质量也很高,79 继续分享好文章
也在边学边总结,希望多交流爱好
卧龙小
卧龙小
楼主,牛掰,H5 SWITF OC 同时开弓,博客质量也很高,79 继续分享好文章
珲少
珲少

引用来自“kkkkkin”的评论

项目下下来怎么有错啊
写这个的时候环境是xcode6.1,因为swift在一直完善,在更高版本中会报错
kkkkkin
kkkkkin
项目下下来怎么有错啊
lanmingle
lanmingle
标记,真在努力学习语法中
Jarry_liu
Jarry_liu
不错0
Allen111333
Allen111333
jjjj
关于《Swift权威指南》这本书

《Swift权威指南》分为两部分,第一部分主要介绍了Swift的基础语法。主要包括运算符、字符串、集合类、控制流、函数、枚举类型、类、结构体、属性、方法、下标、泛型、扩展、协议等内容。第二...

生气的散人
2014/08/13
2.1K
0
【微信赠书活动】《Swift权威指南 》随书配有教学视频哟!!

【微信赠书活动】今日将赠出《Swift权威指南 》5本。 参与方法:第一步:扫描下方二维码 第二步扫描后关注我们的微信公众账号 3.回复书名 完成这三步即可参与。活动截止至明天晚上10:00 。到...

生气的散人
2014/09/04
628
10
8月,推荐给程序员们的书

八月,好书来袭,在Swift刚刚发布不久之后,即将出版《Swift权威指南》一书,预计8月下旬上市,敬请关注,据说是国内第一本含金量超过Swift官方文档的原创图书,到时等你们来评分。 本期特别...

生气的散人
2014/08/07
3.4K
0
libgdx 如何实现微信分享

最近在研究libgdx,改了一版flappybird,现在想实现微信朋友圈分享功能。研究了微信开放平台提供的基于android平台接口说明,但是苦于flappybird的代码都是写在libgdx的基准工程里的,andro...

yukaiehome
2014/07/28
575
1
我想找一份cocos2d-x游戏开发初级程序员的工作

本人学的是Java,但对游戏开发有浓厚的兴趣,目前正在学习cocos2d-x,想找一份关于游戏开发的工作,不知道这个想法可不可行。本人有一定的C/C++基础,正在尝试写类似Flappy Bird的游戏。...

droideep
2014/02/17
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
15分钟前
0
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler...

大头鬼_yc
25分钟前
0
0
centos7修改命令行或图形界面启动模式

1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改启动模式(修改为图形界面,要是修改为命令行就multi-user.target) 2.systemctl set-default multi-...

大圣39
30分钟前
0
0
vue预渲染

prerender-spa-plugin 安装prerender-spa-plugin (插件使用见npm官网)[https://www.npmjs.com/package/prerender-spa-plugin] npm install prerender-spa-plugin --save-dev 配置prerender-s......

莫西摩西
52分钟前
1
0
Command模式

https://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

南桥北木
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部