Swift游戏实战-跑酷熊猫 12 与平台的碰撞

这节主要实现熊猫和平台的碰撞,实现熊猫在平台上奔跑

要点

对平台进行物理属性设置

//设置物理体以及中心点
self.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.width, self.height), center: CGPointMake(self.width/2, 0))
//设置碰撞标示符
self.physicsBody.categoryBitMask = BitMaskType.platform
//不受碰撞影响
self.physicsBody.dynamic = false
//不允许角度变化
self.physicsBody.allowsRotation = false
//摩擦力
self.physicsBody.restitution = 0

改造熊猫类

//用或“|”分割需要进行检测的标示符
self.physicsBody.contactTestBitMask = BitMaskType.scene | BitMaskType.platform
//用physicsBody.collisionBitMask来设置产生碰撞效果的物体
self.physicsBody.collisionBitMask = BitMaskType.platform

平台类的代码

import SpriteKit

class Platform:SKNode{
    var width = 0.0
    var height = 10.0

    func onCreate(arrSprite:[SKSpriteNode]){
        for platform in arrSprite{
            platform.position.x=self.width
            self.addChild(platform)
            self.width += platform.size.width
        }

        self.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.width, self.height), center: CGPointMake(self.width/2, 0))
        self.physicsBody.categoryBitMask = BitMaskType.platform
        self.physicsBody.dynamic = false
        self.physicsBody.allowsRotation = false
        //摩擦力
        self.physicsBody.restitution = 0
    }

}

熊猫类的代码

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()
        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()})
    }

}

项目文件地址

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

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

00 游戏预览

01 创建工程导入素材

02 创建熊猫类

03 熊猫跑动动画

04 熊猫的跳和滚的动作

05 踩踏平台是怎么炼成的

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

07 平台的移动

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

09 移除场景之外的平台

10 视差滚动背景

11 欢迎进入物理世界

Swift游戏实战-跑酷熊猫 12 与平台的碰撞

时间: 2024-11-06 03:37:10

Swift游戏实战-跑酷熊猫 12 与平台的碰撞的相关文章

Swift游戏实战-跑酷熊猫 06创建平台类以及平台工厂类

这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台类 我们的平台类继承于SKNode,这样就能被添加进其它节点进而显示在场景中. 它有一个方法来创建平台,这个方法接收一个包含SKSpriteNode的数组.将数组里面的对象横向拼接在一起组成一个完整的平台.同时计算出平台的宽度 onCreate(arrSprite:[SKSpriteNode]){ for platform in arrSprite{ platform.position.x=self.width self.a

Swift游戏实战-跑酷熊猫 07 平台的移动

这节内容我们来实现平台是怎么产生移动动画的. 要点 1 利用数组存放平台 var platforms=[Platform]() 2 有新的平台产生存放进数组 platforms.append(platform) 3 利用主场景的update方法不断地调用平台工厂类的move方法 override func update(currentTime: CFTimeInterval) { platformFactory.move(self.moveSpeed) } 4 move方法接收一个参数,是平台移

Swift游戏实战-跑酷熊猫 13 熊猫打滚

这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样子了 要点: 起跳y坐标: var jumpStart = 0.0 落地y坐标: var jumpEnd = 0.0 在didBeginContact方法中进行判断 panda.jumpEnd = panda.position.y if panda.jumpEnd-panda.jumpStart <

Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界

物理模拟是一个奇妙的事情,以此著名的游戏有愤怒的小鸟.我们在这节将会一起来了解如何设置重力,设置物理包围体,碰撞的检测. 要点: 设置物理检测的代理: 让主场景遵循SKPhysicsContactDelegate协议.通过didBeginContact方法来响应物体之间是否碰撞.自然,我们要把物理系统的代理设为主场景. self.physicsWorld.contactDelegate = self 设置重力: self.physicsWorld.gravity = CGVectorMake(0

Swift游戏实战-跑酷熊猫 10 视差滚动背景

原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.width < speed{             arrBG[0].position.x = 0             arrBG[1].position.x = arrBG[0].frame.width   } 要点: 什么是视差滚动: 视差滚动(Parallax Scrolling)是指让多层

Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的

原文:Swift游戏实战-跑酷熊猫 05 踩踏平台是怎么炼成的 这节内容我们一起学习下随机长度的踩踏平台的原理是怎么样的. 要点: 平台的组成 我们的平台由3部分组成 左: 中: 右: 其中中间部分是可以无缝衔接的,下面就是两个中间部分衔接在一起 要任何长度的平台,就只需要增加中间模块. 前后能衔接的中间模块的制作: 其实这种左右能够衔接的模块制作过程也很简单 我们只要拿出平台的一半 切出中间部分 然后水平翻转再拼在一起 就完成了中间部分的制作,然后我们把剩余的左边部分再水平翻转,就完成了右边部

Swift游戏实战-跑酷熊猫(一) 简介 (含源代码)

原文:Swift游戏实战-跑酷熊猫(一) 简介 (含源代码) 优酷观看地址:http://v.youku.com/v_show/id_XNzM2Nzc2MTIw.html 通过这个小游戏,我们能够接触到物理系统(SKPhysicsBody,physicsWorld),动作(SKAction),声音素材的播放,文本标签(SKLabelNode) 我们实现的功能有 熊猫动作的切换,跑,跳,滚 落点平台的生成,移动 熊猫吃的竹子的生成和移动 熊猫跑了多长时间和吃了多少根竹子 一些细节 跳到高处落下来速

Swift游戏实战-跑酷熊猫 01 创建工程导入素材

在这节里,我们将建立一个游戏工程,并导入一些必要的素材,例如序列帧动画文件,声音素材文件.动画文件我们使用atlas形式.在打包发布或者模拟器测试的时候,它会将整个.atlas文件夹下的图片打包成一张png图片. 要点: texture atlas :它包含了一组相关的texture.使用atlas可以提高性能 项目文件地址 http://yun.baidu.com/share/link?shareid=3824235955&uk=541995622 Swift游戏实战-跑酷熊猫系列 00 游戏

Swift游戏实战-跑酷熊猫 00 游戏预览

这个系列我们将要一起来做一个这样的游戏 Swift游戏实战-跑酷熊猫 00 游戏预览,布布扣,bubuko.com