2016-04-13 8 views
1

背部手術から回収中にスプライトキットを教えてください。あなたが提供する助けや指導があれば大歓迎です。SKAction最後にインスタンシエートされたスプライトを更新します

私は子供のSKEmitterに「モンスター」スプライトを追加する機能を持っています。このエミッタをSKEmitterを「オン」にして「オフ」にしたいと思います。これは、画面上にスプライトが1つしかない限り機能します。ファンクションから2番目のノードが作成されると、最初のノードはオンとオフを停止します。

SKActionは最新のノードでのみ動作しているようです。私はこれを修正する方法を教えてくれるものは何もできません。

UIで表示される例。 SKEmitter On and Off

マイコード:

flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks")! 
    let newX = flameThrowerSplash.position.x - 475 
    let newY = flameThrowerSplash.position.y + (zombie1.size.height * 0.7) 
    let newLocation = CGPointMake(newX, newY) 

    flameThrowerSplash.position = newLocation 
    flameThrowerSplash.targetNode = currentScene 

    let wait = SKAction.waitForDuration(0.5) 
    let pauseEmitter = SKAction.runBlock({self.flameThrowerSplash.particleBirthRate = 0}) 
    let startEmitter = SKAction.runBlock({ self.flameThrowerSplash.particleBirthRate = 455}) 
    let wait2 = SKAction.waitForDuration(0.5) 
    let run = SKAction.sequence([wait, startEmitter,wait2, pauseEmitter]) 

    zombie1.runAction(SKAction.repeatActionForever(run)) 
+0

私はこのコードと混乱していますが、flamethrowerは何に割り当てられていますか?あなたのシーン?ゾンビに火炎放射器を割り当て、ゾンビでパーティクルを実行します。それ以外の場合、flameThrowerSplashは上書きされ、以前のflameThrowerSplashはシーンの子としてのみ存在し、ゾンビ1とゾンビ1にはアクセスできません。ゾンビ2は両方とも炎の最新のインスタンスを制御します。ThrowerSplace – Knight0fDragon

+0

私は謝罪しました。私は、火炎放射器の変数を変更するというSKActionsを制御するコードのみを含んでいました。 「モンスター」と火炎放射器を追加する完全な機能は、あなたが上に持っているのとまったく同じです。問題は、2番目の「モンスター」が追加されたときです。最初のモンスターがオンとオフに切り替わらないことがわかります。より長いビデオセグメントを録画した場合は、新しいモンスターが追加されるたびに、追加された最後のモンスターだけがSKactionの影響を受けてエミッタをオン/オフに変更することがわかります。 (混乱のために申し訳ありません)とコメントありがとうございました –

+0

あなたは私のコメントをお読みですか? @Hamoboがあなたを投げ捨てた理由を知ることができます。なぜなら、彼の答えが問題を解決したり、私のコメント全体を読んだり、あなたが産んだすべての新しいゾンビが最新の炎をコントロールしたりするので、投手。もし私があなただったら、ゾンビをカスタムクラスにして、クラスの中に火炎放射器を生み出してください。もし私がコードをいくつか持っていれば、それを正しく答える方法をあなたに示すことができます。 – Knight0fDragon

答えて

2

あなたはflameThrowerSplashシーンプロパティになりたいようにそれが見えるdoesntの。代わりに、この

flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks")! 

はちょうど

let flameThrowerSplash = SKEmitterNode(fileNamed: "flamesThrowerSplash.sks") 

が、あなたは、それぞれ独立してゾンビに追加することができ、新たな変数として宣言します。

あなたはそれぞれの新しいゾンビのためにそれを再割り当てしていました。なぜそれが消えていたのですか。

+0

私は申し訳ありません、私は火炎放射器の変数を変更することをSKActionsを制御したコードだけです。 "モンスター"とFlamethrowerを追加する完全な機能は、あなたが上に持っているのとまったく同じです。問題は、2番目の "モンスター"が追加されたときです - 最初のものがもはやオンとオフを切り替えることはありません。あなたが新しいモンスターが追加されるたびに、追加された最後のモンスターのみがエミッターのオンとオフを変更するためにSKactionの影響を受けることが分かります(混乱して申し訳ありません)。 –

+0

いいえ、これは完全な答えではありません。あなたは彼のFlamethrowerをローカルにして、コードの残りの部分に対処できません。コンパイルエラーやメモリリーク – Knight0fDragon

関連する問題