文档章节

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

珲少
 珲少
发布于 2015/06/11 17:00
字数 737
阅读 4715
收藏 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

© 著作权归作者所有

共有 人打赏支持
珲少

珲少

粉丝 857
博文 384
码字总数 452377
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
8分钟前
0
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
12分钟前
28
4
jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部