前提・実現したいこと
SwiftのSpriteKitで2Dのゲームを制作しています。
Node接触時(didBegin)の動作が上手くいきません。
発生している問題・エラーメッセージ__イタリックテキスト__
missile(Node)がasteroid(Node)に1度接触すると2度目からmissile(Node)が出現されなくなる。
エラーメッセージ
エラーは表示されない。
該当のソースコード
//button(Node)をタッチした際にmissile(Node)を出現させています。
//このコードは特に問題なく作動します。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if isPaused { return }
self.missile.physicsBody = SKPhysicsBody(circleOfRadius: self.missile.frame.height / 2 ) //?????????????? self.missile.physicsBody?.categoryBitMask = missileCategory self.missile.physicsBody?.collisionBitMask = spaceshipCategory | missileCategory | asteroidCategory self.missile.physicsBody?.contactTestBitMask = asteroidCategory if let touch = touches.first { let locatin = touch.location(in: self) if self.atPoint(locatin).name == "button" { missile.position = CGPoint(x: self.spaceship.position.x , y: self.spaceship.position.y + 10 ) missile.size = CGSize(width: 75, height: 75) addChild(missile) let topButton = SKAction.moveTo(y: frame.width / 2 - self.spaceship.position.y , duration: 0.2) let remove = SKAction.removeFromParent() missile.run(SKAction.sequence([topButton, remove])) } }
//missile(Node)とasteroid(Node)の接触時にmissile(Node)とasteroid(Node)を消滅させたいのです。
//1度目の発射は問題ないのですが、1度発射と消滅を行うとmissile(Node)の発射が行われなくなります。
func didBegin(_ contact: SKPhysicsContact) {
var asteroid: SKPhysicsBody var target: SKPhysicsBody if contact.bodyA.categoryBitMask == asteroidCategory { asteroid = contact.bodyA target = contact.bodyB } else { asteroid = contact.bodyB target = contact.bodyA } guard let asteroidNode = asteroid.node else { return } guard let tagetNode = target.node else { return } guard let Bakuhatu = SKEmitterNode(fileNamed: "Bakuhatu") else { return } Bakuhatu.position = asteroidNode.position addChild(Bakuhatu) //ここに原因があるかと思います。。 asteroidNode.removeFromParent() if target.categoryBitMask == missileCategory { tagetNode.removeFromParent() } self.run(SKAction.wait(forDuration: 1.0)) { Bakuhatu.removeFromParent() } }
Swift
試したこと
なぜこのような状態になってしまっているのか訳がわかっていない状況で、何もできていないです。。
補足情報(FW/ツールのバージョンなど)
あなたの回答
tips
プレビュー