Swift游戏实战-跑酷熊猫 13 二段跳的实现

简介: 原文:Swift游戏实战-跑酷熊猫 13 二段跳的实现   这节内容我们来实现熊猫的二段跳。   要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump。 逻辑二,第二次点击屏幕,status就会变成jump2。
原文: Swift游戏实战-跑酷熊猫 13 二段跳的实现

 

这节内容我们来实现熊猫的二段跳。

 

要点:

二段跳的逻辑:

逻辑一,第一次点击屏幕,status就会变成jump。

逻辑二,第二次点击屏幕,status就会变成jump2。

逻辑三,当status变成jump2的时候不响应屏幕点击

逻辑四,当熊猫落地时将status变为run。

 

所以只要当status的不等于jump2的时候,点击屏幕都会给熊猫施加一个向上的速度。这时候判断。如果是一段跳就将status设为jump。如果是二段跳就将status设为jump2。落地改变状态之前已经写好了。

二段跳的实现:

       

 func jump (){
        self.removeAllActions()
        if status != Status.jump2 {
            self.runAction(SKAction.animateWithTextures(jumpFrames, timePerFrame: 0.05),withKey:"jump")
            self.physicsBody.velocity = CGVectorMake(0, 450)
            if status == Status.jump {
                status = Status.jump2
            }else{
                status = Status.jump
            }
        }
    }

 

 

整体代码:

import SpriteKit
 
enum Status:Int{
    case run=1,jump,jump2,roll;
}
 
class Panda : SKSpriteNode {
    let runAtlas = SKTextureAtlas(named: "run.atlas")
    let runFrames = [SKTexture]()
   
    let jumpAtlas = SKTextureAtlas(named: "jump.atlas")
    let jumpFrames = [SKTexture]();
   
    let rollAtlas = SKTextureAtlas(named: "roll.atlas")
    let rollFrames = [SKTexture]();
   
    var status = Status.run
 
    init(){
        let texture = runAtlas.textureNamed("panda_run_01")
        let size = texture.size()
        super.init(texture:texture,color:SKColor.whiteColor(),size:size)
       
        var i:Int
        for i=1 ; i<=runAtlas.textureNames.count ; i++ {
            let tempName = String(format: "panda_run_%.2d", i)
            let runTexture = runAtlas.textureNamed(tempName)
            if runTexture {
                runFrames.append(runTexture)
            }
        }
        for i=1 ; i<=jumpAtlas.textureNames.count ; i++ {
            let tempName = String(format: "panda_jump_%.2d", i)
            let jumpTexture = jumpAtlas.textureNamed(tempName)
            if jumpTexture {
                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 {
                rollFrames.append(rollTexture)
            }
        }
       
        self.physicsBody = SKPhysicsBody(rectangleOfSize: texture.size())
        self.physicsBody.dynamic = true
        self.physicsBody.allowsRotation = false
        //摩擦力
        self.physicsBody.restitution = 0
        self.physicsBody.categoryBitMask = BitMaskType.panda
        self.physicsBody.contactTestBitMask = BitMaskType.scene | BitMaskType.platform
        self.physicsBody.collisionBitMask = BitMaskType.platform
        run()
    }
    func run(){
        self.removeAllActions()
        self.status = .run
        self.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(runFrames, timePerFrame: 0.05)))
    }
   
    func jump (){
        self.removeAllActions()
        if status != Status.jump2 {
            self.runAction(SKAction.animateWithTextures(jumpFrames, timePerFrame: 0.05),withKey:"jump")
            self.physicsBody.velocity = CGVectorMake(0, 450)
            if status == Status.jump {
                status = Status.jump2
            }else{
                status = Status.jump
            }
        }
    }
   
    func roll(){
        self.removeAllActions()
        status = .roll
        self.runAction(SKAction.animateWithTextures(rollFrames, timePerFrame: 0.05),completion:{() in self.run()})
    }
  
}

 

项目文件地址

http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622

 

Swift游戏实战-跑酷熊猫系列

00 游戏预览

01 创建工程导入素材

02 创建熊猫类

03 熊猫跑动动画

04 熊猫的跳和滚的动作

05 踩踏平台是怎么炼成的

06 创建平台类以及平台工厂类

07 平台的移动

08 产生源源不断的移动平台

09 移除场景之外的平台

10 视差滚动背景

11 欢迎进入物理世界

12 与平台的碰撞

目录
相关文章
|
机器学习/深度学习 人工智能 文字识别
《MNN For Swift》移动端机器学习实战课程发布!
5期系列课程教学,最新实践分享!
841 0
《MNN For Swift》移动端机器学习实战课程发布!
|
iOS开发 Swift API
写在新书《Swift开发手册:技巧与实战》出版之际
1月份的时候新书出版了,正值研究生毕业之际,想写点什么又无法抵抗毕业浮躁的心态,所以推到了正式入职之后。
1061 0
|
JSON API 数据格式
swift实战小程序1天气预报
       在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。
898 0
|
JSON 数据格式 Swift
Swift实战-豆瓣电台(一)准备
原文:Swift实战-豆瓣电台(一)准备   一 准备 我们现在看看我们要做一个什么样的东西   观看地址:http://v.youku.com/v_show/id_XNzI4ODY2Mjky.html 布局   通过上面这张图我们可以看出整个demo有两个视图,视图一用来播放音乐,视图二用来选择频道。
1010 0
|
JSON Swift 数据格式
Swift实战-豆瓣电台(二)界面布局
原文:Swift实战-豆瓣电台(二)界面布局   观看地址 http://v.youku.com/v_show/id_XNzMwMDg4NzAw.html   这节的内容主要是storyboard的操作。
828 0
|
JSON Swift 数据格式
Swift实战-豆瓣电台(三)获取网络数据
原文:Swift实战-豆瓣电台(三)获取网络数据 观看地址:http://v.youku.com/v_show/id_XNzMwMzQxMzky.html 这节内容,我们先说了怎么将storyboard中的组件在类中进行绑定。
942 0
|
缓存 Swift
Swift实战-豆瓣电台(四)歌曲列表的展现
原文:Swift实战-豆瓣电台(四)歌曲列表的展现 观看地址 http://v.youku.com/v_show/id_XNzMwNDE0OTA4.html 这节的主要内容是如何利用cell展现获取到的数据。
782 0
|
Swift
Swift实战-豆瓣电台(五)播放音乐
原文:Swift实战-豆瓣电台(五)播放音乐 观看地址 http://v.youku.com/v_show/id_XNzMwODM0MzI0.html   在这节里面,我们简单学习了一下MediaPlayer的使用 引入媒体框架 import MediaPlayer   申...
852 0
|
Web App开发
Swift实战-豆瓣电台(六)视图跳转,传参及回跳
原文:Swift实战-豆瓣电台(六)视图跳转,传参及回跳 youku观看地址:http://v.youku.com/v_show/id_XNzMxMzQ3MDcy.html 要点 在ChannelController里面声明一个代理   这个代理遵循我们自定义的协议ChannlePrococol。
985 0
|
Swift
Swift实战-豆瓣电台(七)显示动画
原文:Swift实战-豆瓣电台(七)显示动画   youku观看地址http://v.youku.com/v_show/id_XNzMxODQzNDIw.html 这是一个很酷的动画效果。特别是数据多的时候 知识点 在单元格(Cell)显示方法中设置动画   func table...
858 0