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

原文: 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)