spritekit 2个物体碰撞但不会相互反弹

spritekit 2 bodies collide but don't bounce off each other

我在一个场景中有 2 个物理体。其中一个身体是一个直接下落(由于重力)的盒子,另一个是可以站立、运行 或在盒子上跳跃的玩家。

目前,当玩家与掉落的箱子相撞时,它们会相互反弹,但是,我不希望他们这样做,我希望箱子和玩家不会影响彼此的物理运动,但是只是为了让球员能够站立,运行 并在他在禁区内时跳跃。

这是两个精灵的代码:

func setUpPlayer() {
        player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
        player.physicsBody?.mass = 1
        player.physicsBody?.restitution = 0
        player.xScale = 0.5
        player.yScale = 0.5
        player.position = CGPoint(x: 600, y: 800)
        addChild(player)
    }

func addSquare() {
        let squareNode = SKSpriteNode(imageNamed: "fblogo.png")

        squareNode.physicsBody = SKPhysicsBody(rectangleOfSize: squareNode.size)
        squareNode.physicsBody?.mass = 1
        squareNode.physicsBody?.restitution = 0.2
        squareNode.physicsBody?.linearDamping = 0
        squareNode.physicsBody?.angularDamping = 0
        squareNode.physicsBody?.dynamic = true
        squareNode.xScale = 0.5
        squareNode.yScale = 0.5
        squareNode.position = CGPoint(x: 500, y: 700)
        self.addChild(squareNode)
        squaresArray.addObject(squareNode)
    }

尝试将他们的 physicsBody.collisionBitMask 设置为零。也许你可以只做 0:

func setUpPlayer() {
        player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
        player.physicsBody?.mass = 1
        player.physicsBody?.restitution = 0
        player.xScale = 0.5
        player.yScale = 0.5
        player.position = CGPoint(x: 600, y: 800)
        addChild(player)
    }

func addSquare() {
        let squareNode = SKSpriteNode(imageNamed: "fblogo.png")

        squareNode.physicsBody = SKPhysicsBody(rectangleOfSize: squareNode.size)
        squareNode.physicsBody?.mass = 1
        squareNode.physicsBody?.restitution = 0.2
        squareNode.physicsBody?.linearDamping = 0
        squareNode.physicsBody?.angularDamping = 0
        squareNode.physicsBody?.dynamic = true
        squareNode.physicsBody?.collisionBitMask = 0
        squareNode.xScale = 0.5
        squareNode.yScale = 0.5
        squareNode.position = CGPoint(x: 500, y: 700)
        self.addChild(squareNode)
        squaresArray.addObject(squareNode)
    }

这可能不完全是您需要的,因为我在发布之前没有将它放入 Xcode , 检查它是否有效。但是在对象上设置collisionBitMask 意味着它只"bumps into" 或"collides" 具有传入的UInt 或变量的BitMask 的对象。这样,它仍然是动态的,但不会受到碰撞的物理影响。