SpriteKit - 检测两个SKShapeNodes"通过"彼此

时间:2015-01-02 14:44:04

标签: ios sprite-kit collision skphysicsbody

它可能看起来很长但是大部分都是相同的代码:P希望我能很好地解释我的自我:) 我希望我能解释自己。 情况就是这样: 我有一个SKShapeNode让他叫他X. 这就是我声明X( ONLY ONCE IN didMoveToView )的方式:

 var X = SKShapeNode(circleOfRadius: 15)
        X.position = CGPointMake(100  , 100)
        X.fillColor = SKColor.yellowColor()
        X.physicsBody = SKPhysicsBody(circleOfRadius: coin.frame.width/2)
        X.physicsBody?.dynamic = true
        X.physicsBody?.linearDamping = 1        
        X.physicsBody?.affectedByGravity = false
        X.physicsBody?.categoryBitMask = coincategory
        X.physicsBody?.contactTestBitMask = coincategory
        self.addChild(coin)

现在我的第二个SKShapeNode,让我们称他为Y有点棘手,因为我的游戏原因,我需要他的大小是动态的,所以这就是我所做的和它的工作,首先,在 didSimulatePhysics()中声明他像这样:

 override func didSimulatePhysics() {
        let pixel = self.childNodeWithName(X.name!)
        var pathtodraw : CGMutablePathRef!
        pathtodraw = CGPathCreateMutable()
        CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
        CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
        CGPathCloseSubpath(pathtodraw)
        Y.path = pathtodraw

        self.addChild(Y)

{

而且他的大小是动态的(游戏包括X的移动),我每次都在更新方法中移除他,以便路径可以自行更新:

 override func update(currentTime: NSTimeInterval) {


        Y.removeFromParent()


}

我想要实现的目标:每次物体X越过Y println(“它们刚刚相互传递”),我不希望它们对接触做出反应,或者彼此反弹,它们应该对每个看不见另外,但我需要检测它们何时相互通过。

问题是什么:当我将物理学添加到Y时,节点必须删除他自己,他不断生成更多节点并自己填充屏幕。如果它保持在上面的方式,它完美地工作,它删除他自己并更新大小并始终保持它只有1个节点。 这是尝试添加到Y:

override func didSimulatePhysics() {
        let pixel = self.childNodeWithName(X.name!)
        var pathtodraw : CGMutablePathRef!
        pathtodraw = CGPathCreateMutable()
        CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
        CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
        CGPathCloseSubpath(pathtodraw)
        Y.path = pathtodraw

        self.addChild(Y)

        **linenode = SKShapeNode(path: pathtodraw)
        linenode.physicsBody = SKPhysicsBody(edgeChainFromPath: pathtodraw)**

      {

It Keep会生成很多节点并且会删除它们。知道我能做些什么才能做到这一点?谢谢你们!

1 个答案:

答案 0 :(得分:0)

由于可以在不从场景中删除节点的情况下更新形状节点的路径,然后将其添加回来,我建议您将Y添加到didMoveToView中的场景并删除addToChild以及removeFromParentdidSimulatePhysics方法中的update。此外,将物理主体添加到Y,而不是创建新的形状节点。最后,您正在创建X,然后将coin添加到场景中。

相关问题