ノードが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は()私だけのために働くようです画面上のノード。それ以上の場合、それは動作しません。
変数 'mete'は、常に衝突に関係するものではなく、作成された最後のmeteを参照します。したがって、 'removeFromParent'が動作します。あなたが気づいていないかもしれない他のノードを削除するだけです。 –
メートの物理カテゴリ 'ColliderType.mete'を修正すると、コードが明確になるかもしれません。また、 'contactTest'と' collision'ビットのマスクは 'category'と同じであるべきですか?プレーヤーのカテゴリは何ですか? –