Ich habe Knoten, die jede Sekunde vom oberen Bildschirmrand fallen. Wenn der Player (am unteren Bildschirmrand) mit einem fallenden Knoten kollidiert, möchte ich, dass dieser bestimmte Knoten vom Bildschirm entfernt wird, aber der andere weiter fallen.Swift Entferne 1 Knoten, der sich nach der Kollision bewegt
Ich dachte, node.removeFromParent() könnte dies tun oder alle Knoten entfernen, aber nichts passiert unabhängig davon. Hier
ist, was ich habe:
machen die Knoten fallen:
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)
}
Detektierkontakt:
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() scheint nur für mich zu arbeiten, wenn man es Knoten auf dem Bildschirm. Mehr als funktioniert es nicht.
Die Variable 'mete' bezieht sich immer auf das zuletzt erstellte Mete und nicht auf das Kollisionsdatum. Also wird 'removeFromParent' funktionieren, es wird nur einen anderen Knoten entfernen, den Sie vielleicht nicht bemerkt haben. –
Sie könnten Ihren Code klarer finden, wenn Sie die Physikkategorie "ColliderType.mete" von mete ansprechen. Sind Sie sicher, dass die Bitmasken 'contactTest' und' collision' identisch mit der 'category' sind? Was ist die Kategorie des Spielers? –