2017-03-20 12 views
0

ノードが1秒おきに画面の上から落ちています。 プレーヤー(画面の下部にある)が落下ノードと衝突するとき、私はその特定のノードを画面から削除したいが、他のノードは落ち続けるようにしたい。スウィフト衝突後に1ノード移動する

私はnode.removeFromParent()がこれを行うかもしれないと思ったり、すべてのノードを削除しても何も起こっていません。ここで

は私が持っているものです。

は、ノードが落ちる作る:接触検出

func makeMete() { 

    let meteTexture = SKTexture(imageNamed: "mete.png") 
    let movementAmount = arc4random() % UInt32(self.frame.width) 
    let meteOffset = CGFloat(movementAmount) - self.frame.width/2 
    let moveMete = SKAction.move(by: CGVector(dx: 0, dy: -2 * self.frame.height), duration: TimeInterval(self.frame.height/300)) 

    let mete = SKSpriteNode(texture: meteTexture) 
    mete.position = CGPoint(x: self.frame.midX + meteOffset, y: self.frame.midY + self.frame.height/2) 

    mete.physicsBody = SKPhysicsBody(circleOfRadius: meteTexture.size().height/2) 
    mete.physicsBody!.isDynamic = false 
    mete.physicsBody!.contactTestBitMask = ColliderType.object.rawValue 
    mete.physicsBody!.categoryBitMask = ColliderType.object.rawValue 
    mete.physicsBody!.collisionBitMask = ColliderType.object.rawValue 

    mete.run(moveMete) 
    self.addChild(mete) 




} 

:1があるとき

func didBegin(_ contact: SKPhysicsContact) { 

    if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue { 



    player.physicsBody!.velocity = CGVector(dx: 0, dy: 0) 
    isUserInteractionEnabled = false 

    mete.removeFromParent() 


    } 

.removeFromParentは()私だけのために働くようです画面上のノード。それ以上の場合、それは動作しません。

+0

変数 'mete'は、常に衝突に関係するものではなく、作成された最後のmeteを参照します。したがって、 'removeFromParent'が動作します。あなたが気づいていないかもしれない他のノードを削除するだけです。 –

+0

メートの物理カテゴリ 'ColliderType.mete'を修正すると、コードが明確になるかもしれません。また、 'contactTest'と' collision'ビットのマスクは 'category'と同じであるべきですか?プレーヤーのカテゴリは何ですか? –

答えて

1

もしmeteを使うなら、それは実際のオブジェクトのmeteを参照し、私は画面に多くのmetesがあると仮定します。物理的なボディから実際のノードを参照して、それを親から削除してみてください。

は.nodeファイルは、あなたが問題になっている実際のインスタンスにアクセスすることができます

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue { 

     contact.bodyA.node?.removeFromParent() 

}else if contact.bodyB.categoryBitMask == ColliderType.object.rawValue { 
     contact.bodyB.node?.removeFromParent() 
    } 

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue { 

player.physicsBody!.velocity = CGVector(dx: 0, dy: 0) 
isUserInteractionEnabled = false 
mete.removeFromParent() 

} 

を交換してください。

Good Luck!

+0

これは素晴らしい作品です。私はちょっと別の小さな質問を投稿したことがある場合は、見て気にしない! –

+0

偽の警報別の30分ほどは投稿できません。私は、私のバックグラウンドを動かして衝突時に停止する機能を得ようとしています。 bg.run(moveBGForever)。私は.removeAllActionsを試しましたが、これはしません。 –

関連する問題