文档章节

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

珲少
 珲少
发布于 2015/06/11 17:00
字数 737
阅读 4671
收藏 67
点赞 3
评论 7

用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

© 著作权归作者所有

共有 人打赏支持
珲少

珲少

粉丝 837
博文 375
码字总数 440447
作品 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
超级精简的flappy Bird.

package testPackage; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.a......

守护_玉
2014/02/26
0
0
Cocos2d-js连续播放音频卡顿问题

最近在用Cocos2d-js在做一个小游戏,类似flappy bird那种。 演示地址: http://flyblock-d0b2f.coding.io/ 代码地址:https://coding.net/u/elevenchen/p/FlyBlock/git 每次点击屏幕会播放一个...

Nov_Eleven
2014/12/19
0
0
Flappy Bird添加分享微信朋友圈功能

前段时间Flappy Bird很火, 之后很快就下架了。由于想在朋友圈炫炫,但又只有查看google排行功能,无聊之下,只能自己改一下它的功能了。 要快速弄,只能破解他的代码,然后植入自己的功能了...

honeyli
2014/03/02
0
1
Cocos2d-x 3.x plist+png 做动画

*转载请注明出处: http://blog.csdn.net/lttree 前言: 这次的东西,其实是在做完2048后,我有个Flash想用。 就像,天天系列,开头会有 ”提米“ 的叫声+动画, 是不是感觉很带感。 之前,做...

simpower
2015/08/01
0
0
FlappyBird HTML5 开源版

各位亲,爪机扫一下二维码就可以玩咯: 说到效率呢,兼容性呢,还有很长一段路要走: 1.iPhone几乎能够完美运行,但是没有声音,因为ios有个限制就是:必须由用户操作触发才能播放声音。希望...

tommyfok
2014/02/23
0
2
Swift学习第二练——Swift项目时光电影

Swift学习第二练——Swift项目时光电影 很早以前的一个OC的练习项目,用swift重新写了一遍,因为xcode版本的更新对swift的兼容度也在不断改变,此版本适用于xcode6.1。 这个项目中,用swift...

珲少
2015/06/28
0
0
OSChina 技术专题之 Swift 苹果全新开发语言

Swift 是苹果新推出的编程语言,专门针对 OS X 和 iOS 的应用开发。Swift 在各个方面优于 Objective-C,也不会有那么多复杂的符号和表达式。同时,Swift 更加快速、便利、高效、安全。除此之...

OSC编辑部
2014/11/10
4K
4
关东升的《《从零开始学Swift》即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的...

智捷课堂
2015/08/17
0
0
swift简介和语言特点

swift是苹果公司在2014年在WWDC上发布的全新编程语言 我们可以在Swift语法中看到Objective—C、JavaScript、C#、Python等语言的影子,它借鉴了这些语言的影子,同时具备编译型语言的高性能和...

我是华丽的笨笨
2016/03/10
60
0
关东升的《从零开始学Swift》第2版已经出版

关东升的《从零开始学Swift》第2版已经出版 大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》 《从零开始学Swift》将在《...

tony关东升
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
23分钟前
2
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
40分钟前
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
昨天
0
0
vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部