Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚

简介: 原文:Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚之前我们学会了跑的动作,现在我们可以利用同样的方法来实现了跳和打滚的动画。   …… class Panda : SKSpriteNode { …… //跳的纹理集合 let jumpAtlas = SKTextureAtlas(named: "jump.
原文: Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚

之前我们学会了跑的动作,现在我们可以利用同样的方法来实现了跳和打滚的动画。

 

……

 

class Panda : SKSpriteNode {

   ……

    //跳的纹理集合

    let jumpAtlas = SKTextureAtlas(named: "jump.atlas")

    //存储跳的文理的数组

    let jumpFrames = [SKTexture]();

    //打滚的文理集合

    let rollAtlas = SKTextureAtlas(named: "roll.atlas")

    //存储打滚文理的数组

    let rollFrames = [SKTexture]();

 

   

    var status = Status.run

    //构造器

    override init(){

        ……

        //填充跳的纹理数组

        for i=1 ; i<=jumpAtlas.textureNames.count ; i++ {

            let tempName = String(format: "panda_jump_%.2d", i)

            let jumpTexture = jumpAtlas.textureNamed(tempName)

            if jumpTexture != nil {

                jumpFrames.append(jumpTexture)

            }

        }

        //填充打滚的纹理数组

        for i=1 ; i<=rollAtlas.textureNames.count ; i++ {

            let tempName = String(format: "panda_roll_%.2d", i)

            let rollTexture = rollAtlas.textureNamed(tempName)

            if rollTexture != nil{

                rollFrames.append(rollTexture)

            }

        }

    }

    func run(){

       ^

    }

    //跳

    func jump (){

        self.removeAllActions()

        status = .jump

        self.runAction(SKAction.animateWithTextures(jumpFrames, timePerFrame: 0.05))

    }

    //打滚

    func roll(){

        self.removeAllActions()

        status = .roll

        self.runAction(SKAction.animateWithTextures(rollFrames, timePerFrame: 0.05),completion:{() in self.run()})

    }

 

    required init(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

}

 

注意:

由于跳和打滚的动作不像跑的动作需要循环播放,所以就不需要用repeatActionForever。打滚动作结束后就执行跑步动作。而跳跃动作由于不知道什么时候落地,所以将会由外部控制它的动作转变。

 

完成了以上的代码,我们怎么能验证我们的代码没有错呢?让我们打开GameScene,写一个响应屏幕点击的方法,简单的写个逻辑来测试跳和打滚动作没写错。代码如下:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
//当熊猫状态为跑的时候播放跳的动作
if panda.status == Status.run {
panda.jump()
}else if panda.status == Status.jump {
//当状态为跳的时候,执行打滚动画
panda.roll()
}
}

 

    运行代码,我们会发现跑跳滚的动画都很正确的执行了。当然这段代码只是演示用的,过后要删除。

 

我的微信公众号

我写的破书:《Swift语言实战晋级》http://item.jd.com/11641501.html

目录
相关文章
|
4月前
|
存储 安全 Swift
Swift 语言:什么是 Swift 的泛型(Generics)?
Swift 语言:什么是 Swift 的泛型(Generics)?
39 0
|
4月前
|
Swift iOS开发
Swift 语言: 什么是协议(Protocol)?如何实现和使用协议?
Swift 语言: 什么是协议(Protocol)?如何实现和使用协议?
51 2
|
13天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
2天前
|
安全 Swift Android开发
构建移动应用:Swift vs Kotlin —— 两大主流语言的对决
【5月更文挑战第11天】Swift与Kotlin在移动应用开发中各有优势。Swift是iOS开发的首选,以其简洁语法、高性能和类型安全著称;而Kotlin是Android的官方推荐语言,以其与Java的无缝互操作、空安全特性和简洁代码受到青睐。两者在语法简洁性、性能和社区支持上表现优秀,但平台兼容性不同。开发者应根据项目需求和目标平台选择合适的语言。
|
13天前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
|
13天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 语言入门指南
【4月更文挑战第30天】Swift是苹果公司的现代编程语言,以其高效、安全和简洁深受喜爱。它融合了类型推断、闭包和泛型等特性,提供强大的内存管理,支持iOS、macOS等多个平台开发。基础语法包括变量、常量、数据类型、运算符和控制流语句。高级特性涵盖函数、闭包、类与结构体、协议以及泛型。学习Swift能为开发者奠定坚实基础。
|
25天前
|
安全 Swift
Swift 语言:什么是可选类型(Optional)?如何处理可选类型的安全解包?
Swift的可选类型是处理值可能缺失的类,用?表示。它们能表示有值或无值状态。安全解包用`if let`或`guard let`避免崩溃,而强制解包`!`则风险较高,若值为`nil`会触发运行时错误。
9 0
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
106 2
|
3月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
213 2
|
4月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1