如何使一个精灵成为另一个精灵的障碍?

时间:2020-05-10 18:04:55

标签: ios swift sprite-kit

我正在制作一个带有移动精灵和学习SpriteKit的障碍的游戏。我希望移动的精灵与障碍物碰撞并反弹,但我希望障碍物保持固定。我该怎么做呢?我尝试了以下失败的尝试:

  • 设置obstacle.physicsBody?.isDynamic = true。这使精灵穿过了障碍。
  • 使用SKConstraint固定对象的移动和旋转。当我这样做时,他们只是彼此经历。
  • 按照obstacle.physicsBody?.mass = CGPoint.maxFiniteMagnitude设置很高的身体质量,但这会冻结游戏。当我将它设置得很高时,它似乎什么也没做。
  • 当对象碰撞时设置obstacle?.physicsBody.velocity = CGVector(dx: 0, dy: 0)。我知道contact.bodyAcontact.bodyB是通过值而不是引用传递的,因此我遍历具有障碍物的数组并以此方式设置速度。障碍仍然被其他精灵推动。

更新: -设置obstacle.physicsBody?.collisionBitMask = PhysicsCategory.none,以使精灵与障碍物碰撞,但不会与障碍物碰撞。

对象的设置如下,鱼是另一个精灵:

obstacle.position = location
obstacle.physicsBody = SKPhysicsBody(rectangleOf: obstacle.size)
obstacle.physicsBody?.isDynamic = true
obstacle.physicsBody?.categoryBitMask = PhysicsCategory.obstacle
obstacle.physicsBody?.contactTestBitMask = PhysicsCategory.fish
obstacle.physicsBody?.collisionBitMask = PhysicsCategory.fish
obstacle.physicsBody?.usesPreciseCollisionDetection = true
self.obstacles.append(obstacle)
super.addChild(obstacle)

请让我知道我是否做错了/误解。谢谢。

1 个答案:

答案 0 :(得分:0)

找到了答案here。其中一个对象需要具有.physicsBody?.isDynamic = true。在这种情况下,我将障碍物设置为false,因此它是静止的。