我正在制作一个带有移动精灵的障碍物并学习SpriteKit的障碍。我希望移动的精灵与障碍碰撞并反弹,但我希望障碍保持固定。我该怎么做呢?我尝试了以下方法,但均未成功:
obstacle.physicsBody?.isDynamic = true
。这使精灵穿过了障碍。SKConstraint
固定对象的移动和旋转。当我这样做时,他们只是互相经历。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)
。对象之一需要具有here。在这种情况下,我将障碍物设置为.physicsBody?.isDynamic = true
,因此它是固定的。