如何精确设置SpriteKit精灵的物理体PhysicsBody

22 篇文章 0 订阅
21 篇文章 0 订阅

如何精确设置SpriteKit精灵的物理体PhysicsBody ,首先要开启精灵的物理体外框显示,
可以直观的在模拟器或者真机上看清楚精灵的物理体外观(精灵周围有一圈兰色的细线)!

精灵周围有一圈兰色的细线
精灵周围有一圈兰色的细线


开启精灵的物理体外框显示


精灵物理体


精灵物理体脚+手


在Scene中的尺寸大小


直接使用rectangleOf


rectangleOf碰撞不精准


碰撞不精准


使用精灵物理体本身的texture 当反重力向上时


精灵物理体的脚还在走动,碰撞到天空后会站立不稳


四处漂浮 Floating Everywhere

如何解决这个问题呢?就是自定义物理体texture


自定义物理体texture


脚的底部采用底座形式


去除物理体脚还有手


精确站立


精确碰撞

以下是PlayerNode的代码

// MARK:-玩家
    func initPlayer(){
        /// Ninja.atlas名称 (位于目录Resources->Images)
        playerTextureAtlas = SKTextureAtlas(named: "Ninja")
        /// 把atlas里的图片append到PlayerTextures数组内
        for i in 1...playerTextureAtlas.textureNames.count {
            let imageName = "t1000\(i)"
            playerTextures.append(SKTexture(imageNamed: imageName))
        }
        /// 节点的物理特性
        /// 1.调用rectangleOf矩形物理外框
        /// self.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: self.size.width, height: self.size.height))
        ///2.调用物理体本身的图片 因为头重脚轻 上升到顶部时导致站不稳;
        //        self.physicsBody =  SKPhysicsBody(texture: SKTexture(imageNamed: "t10001"), size:CGSize(width: SKTexture(imageNamed: "t10001").size().width * 0.7, height: SKTexture(imageNamed: "t10001").size().height * 0.7))
        ///3.精确定制物理体t1Mask
        let playerMask = SKTexture(imageNamed: "t1Mask")
        self.physicsBody = SKPhysicsBody(texture: playerMask, size:  CGSize(width: playerMask.size().width * 0.7, height: playerMask.size().height * 0.7)) /// 0.7 的意思是缩小0.7倍
        self.physicsBody?.restitution = 0  // bounciness物体落下时反弹跳力不会消减
        self.physicsBody?.categoryBitMask    = PhysicsCategory.Player
        self.physicsBody?.contactTestBitMask = PhysicsCategory.Bomb | PhysicsCategory.Coin | PhysicsCategory.SkyLine | PhysicsCategory.GroudLine
        self.physicsBody?.collisionBitMask   = PhysicsCategory.GroudLine | PhysicsCategory.SkyLine
        
    }


完整游戏代码传送门:https://github.com/apiapia/SkyNinjaGameSpriteKitTutorial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值