2015-05-05 69 views
0

我有两个障碍。我可以拖动它们中的一个(精灵)。我会产生这样的效果,当我拖动一个障碍物并用另一个障碍物撞击另一个障碍物时,另一个障碍物将受到撞击的影响,并通过在另一个方向上疑惑而遵循物理定律。碰撞检测swift sprite工具包。

这是我的代码到目前为止。

任何人有任何想法我可以做到这一点? 感谢

func addSprite() { 
    sprite.physicsBody = SKPhysicsBody(circleOfRadius: sprite.size.width/2) 
    sprite.position = CGPoint(x: size.width * 0.35, y: size.height * 0.5) 
    sprite.physicsBody?.dynamic = false 
    sprite.physicsBody?.allowsRotation = false 
    sprite.physicsBody?.restitution = 1.0 
    sprite.physicsBody?.categoryBitMask = UInt32(balCategory) 
    sprite.physicsBody?.contactTestBitMask = UInt32(obstacleCategory) 
    sprite.physicsBody?.friction = 0.0 
    sprite.physicsBody?.angularDamping = 0.0 
    sprite.physicsBody?.linearDamping = 0.0 
    sprite.physicsBody?.usesPreciseCollisionDetection = true 
    sprite.physicsBody?.collisionBitMask = 0 
    addChild(sprite) 
} 
func addObstacle() { 
    treat.setScale(0.5) 
    treat.physicsBody = SKPhysicsBody(rectangleOfSize: treat.size) 
    treat.physicsBody?.dynamic = false 
    treat.physicsBody?.categoryBitMask = UInt32(obstacleCategory) 
    treat.physicsBody?.contactTestBitMask = UInt32(balCategory) 
    treat.physicsBody?.collisionBitMask = 0 
    treat.physicsBody?.usesPreciseCollisionDetection = true 
    treat.name = "treat" 

    treat.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) 
    self.addChild(treat) 
} 

回答

0

所有你需要做的就是切换sprite.physicsBody?.collisionBitMask = 0treat.physicsBody?.collisionBitMask = 0sprite.physicsBody?.collisionBitMask = UInt32(obstacleCategory)你的第一个功能和treat.physicsBody?.collisionBitMask = UInt32(balCategory)

这个值设置为零,当他们碰撞使得它不会与物理互动,让我知道如果这工作。

+0

它使得当两个物体碰撞时,它们彼此接触但不能再彼此通过。他们现在像固体块一样行事。我怎样才能让“待客”像外太空一样漂浮? –

+0

对不起,在我的答案中错过了这个错误,设置了'treat.physicsBody?.dynamic = true',对于精灵也是如此。如果dynamic为false,则意味着它们不能更改/移动 –