博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift游戏实战-跑酷熊猫 12 与平台的碰撞
阅读量:7124 次
发布时间:2019-06-28

本文共 3669 字,大约阅读时间需要 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()})    }   }

 

项目文件地址

 

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

转载地址:http://qcoel.baihongyu.com/

你可能感兴趣的文章
Unity3d 札记-Survival Shooting 知识点汇总--受到伤害时屏幕闪血光如何做到
查看>>
dubbo初认知(dubbo和springCloud关系,在微服务架构中的作用等)(持续更新中)...
查看>>
【Autoprefixer】Hbuilder中配置Autoprefixer
查看>>
mysql-5.7 Using Asynchronous I/O on Linux详解
查看>>
【node.js】REPL(交互式解释器)
查看>>
python中实现多线程的几种方式
查看>>
3DSMAX安装未完成,某些产品无法安装的解决方法
查看>>
写给对MCU感兴趣的读者
查看>>
庆祝访问过百万
查看>>
leetcode 4. Median of Two Sorted Arrays
查看>>
树与二叉树(一)
查看>>
Tomcat 学习进阶历程之Tomcat架构与核心类分析
查看>>
Wps 2013 拼音标注两种方式分析
查看>>
dedecms列表页文章有图调用缩略图 无图留空或自定义图片的方法!
查看>>
安装mysql 5.7.19.0 之前要安装的东西
查看>>
2017-2018-1 20155303 《信息安全系统设计基础》第九周学习总结
查看>>
Android 开源框架 ( 六 ) Volley --- Google的轻量级网络通信框架
查看>>
iOS编码规范(简版)
查看>>
【Noip2016】天天爱跑步
查看>>
采集Snoopy.class.php
查看>>