2017-07-10 40 views
0

我有一個關於我爲發射器產生的碰撞的問題。碰撞發生時,應用程序崩潰。但從我一直在做的研究來看,我沒有看到有什麼不對。發射器碰撞不起作用?

碰撞:

if bodyA.categoryBitMask == 1 && bodyB.categoryBitMask == 3 || bodyA.categoryBitMask == 3 && bodyB.categoryBitMask == 1{ 
    print("END GAME") 
    let dieexplostionNode = SKEmitterNode(fileNamed: "Explode") 
    player.addChild(dieexplostionNode!) 
} 

我失去的東西發射產卵?每次碰撞它崩潰。

+0

dieeexplostionNode可能是零,如果這是崩潰的代碼。如果讓和檢查項目中是否存在Explode.sks文件,請使用。 – Whirlwind

+0

等一下,我需要一個SKS文件嗎?我認爲粒子系統是scnp?難道我做錯了什麼? –

+0

我將如何去添加SCNP文件以使其生成? –

回答

2

根據您對上述答案的評論,我認爲一個行動是你需要的。

if bodyA.categoryBitMask == 1 && bodyB.categoryBitMask == 3 || bodyA.categoryBitMask == 3 && bodyB.categoryBitMask == 1{ 
    print("END GAME") 

dieexplostionNode = SKEmitterNode(fileNamed: "Explosion.sks"){ 
dieexplostionNode.targetNode = self 
//dieexplostionNode.position = player.position - no need for this! 

// add 3 actions 
let wait = SKAction.wait(forDuration: 2) 
let addExplosion = SKAction.run { 
    self.player.addChild(dieexplostionNode!) 
} 
let removeExplosion = SKAction.run { 
     dieexplostionNode?.removeFromParent() 
} 

// put them in a sequence. 
let seq = SKAction.sequence([addExplosion,wait,removeExplosion]) 

// run the sequence 
self.run(seq) 

} 

這會將dieexplostionNode添加到播放器中。然後等待2秒鐘。然後刪除dieexplostionNode

+0

完美!我忘了我可以使用一個序列來做到這一點。非常感謝您的幫助! –

+0

沒問題。如果您覺得爆炸消失突然消失,您可以在序列中添加其他動作。如SKAction.fadeOut。或者在刪除發射器之前的某個時刻將出生率設置爲0) –

2

您是否將SceneKit與SpriteKit混淆? SCK文件/ Abreviations用於SceneKit 如果您想添加SpriteKit粒子發射器文件。 文件 - >新建 - > IOS/OSX - >資源 - > SpriteKit粒子文件

+0

謝謝!我很困惑有什麼不同。我將如何去顯示發射器然後刪除SKNode?我有以下,但在它被觸發之前,它會刪除SKNode。如果讓dieexplostionNode = SKEmitterNode(fileNamed: 「Explosion.sks」){ dieexplostionNode.targetNode =自 dieexplostionNode.position = player.position player.addChild(dieexplostionNode) –

+0

它混淆你正在嘗試做的。嘗試你的代碼我發現的問題是它不顯示。我認爲這是一個很好的開始。問題似乎是你將位置設置爲player.position,然後將其添加到播放器。這是從場景中與玩家相比增加的位置。如果您刪除語句dieexplostionNode.position = player.position,它會將其放置在播放器的默認位置。 –

+1

@DonFirth這是一個很好的觀點。通過將EmittrNode添加到玩家,玩家座標空間中的位置將默認爲0.0。將發射器的位置設置爲0.0,將會抵消玩家座標空間內的位置。換一種說法。節點的位置總是相對於父節點 –