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 的对象。这样,它仍然是动态的,但不会受到碰撞的物理影响。
我在一个场景中有 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 的对象。这样,它仍然是动态的,但不会受到碰撞的物理影响。