我正在制作一个带有移动精灵和学习SpriteKit的障碍的游戏。我希望移动的精灵与障碍物碰撞并反弹,但我希望障碍物保持固定。我该怎么做呢?我尝试了以下失败的尝试:
obstacle.physicsBody?.isDynamic = true
。这使精灵穿过了障碍。SKConstraint
固定对象的移动和旋转。当我这样做时,他们只是彼此经历。obstacle.physicsBody?.mass = CGPoint.maxFiniteMagnitude
设置很高的身体质量,但这会冻结游戏。当我将它设置得很高时,它似乎什么也没做。obstacle?.physicsBody.velocity = CGVector(dx: 0, dy: 0)
。我知道contact.bodyA
和contact.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)
请让我知道我是否做错了/误解。谢谢。
答案 0 :(得分:0)
找到了答案here。其中一个对象需要具有.physicsBody?.isDynamic = true
。在这种情况下,我将障碍物设置为false
,因此它是静止的。