2016-04-26 7 views
0

Ich habe ein Spiel abgeschlossen, das Teil meines letzten Projekts war, das einen Weltraum-Shooter mit Xocde und der schnellen Programmiersprache machen sollte.Optimale Methode, Explosionen in Spritekit hinzuzufügen Xcode

Ich habe alle Anforderungen erfüllt, aber ich wollte hier und da nur ein paar Sachen hinzufügen, nur zum Spaß.

Ich habe es zu, wo Sie ein Schiff steuern und Sie müssen eine Punktzahl von 50 erreichen. Sobald Sie 50 drücken, erscheint ein Boss, der 40 Treffer erfordert.

Ab sofort, sobald die 40 Treffer gelesen, dann bewegt es sich zu einer anderen Szene (Youwin) -Spielszene.

Ich versuche herauszufinden, wie Explosionsbilder auf dem Boss Sprite hinzugefügt werden, während der Sprite langsam den Bildschirm nach oben bewegt.

Ich extrahierte Bilder von einer Explosion gif und fügte sie hinzu und ich würde nur die Texturen alle 0,1 Sekunden wechseln, aber dann dachte ich, das ist zu viel Arbeit.

ich dann versucht, ein Teilchen sks bereits in Xcode nur einmal

func explosion(pos: CGPoint) { 
     var emitterNode = SKEmitterNode(fileNamed: "ExplosionParticle.sks") 
     emitterNode.particlePosition = pos 
     self.addChild(emitterNode) 
     // Don't forget to remove the emitter node after the explosion 
     self.runAction(SKAction.waitForDuration(2), completion: { emitterNode.removeFromParent() }) 

    } 

dann

If score == 40 
{ 

explosion(self.heroSprite.position) 
endGameScene (you win).. etc 

} 

Es funktioniert, aber ...

Die Explosion geschieht zu verwenden, aber es wird nicht die folgen bossSprite, während es den Bildschirm nach oben bewegt.

Meine Frage ist, Was wäre der optimale Weg, Explosionen zu einem Sprite hinzuzufügen, sobald er Null Trefferpunkte erreicht hat.

Der Code, den ich zur Verfügung gestellt könnte ein wenig verändert werden, meinen Wunsch, ich wette, gerecht zu werden, aber ich bin sicher, dass es das Spiel hinken würde und den Rahmen bringt

Ich habe ein Teilchen als Hintergrund ausgeführt, so bin ich sicher, Ich würde eine Verzögerung erfahren.

Vielen Dank im Voraus

Antwort

0

Persönlich habe ich sowohl von dem, was Sie versucht haben und beide funktionieren gut. Es liegt an Ihnen zu entscheiden, was am besten funktioniert.

Animieren mit Texturen

Dies funktioniert einfach (mit SKAction.animateWithTextures()), und es kann nicht wirklich auf die Leistung auswirken, wenn Sie Ihre Texturen vorladen, bevor das Spiel beginnt. Sie brauchen nicht mehr als zehn Texturen, um eine einfache Explosion zu machen. Stellen Sie einfach eine angemessene Zeitverzögerung ein, wenn Sie animieren, und alles wird gut.

Mit SKEmitterNode

Die andere Lösung, die auch schön SKEmitterNode ist beinhaltet. Zum Beispiel war dies eine Möglichkeit, indem ich eine Eigenschaft eines gewünschten Senders für eine aktuelle Szene herstellte. Dann können Sie eine SKAction ausführen, die eine Kopie dieses Senders einige Male nach einer bestimmten Verzögerung hinzufügen wird. Wichtig ist hier , um eine Kopie eines Emitters zum Boss Sprite hinzuzufügen. Wenn es sich bewegt, werden sich alle hinzugefügten Emitter ebenfalls damit bewegen. Vergessen Sie nicht, zPosition auf einem Emitterknoten höher als ein Boss-Sprite zu setzen.

Beachten Sie, dass alles wirklich von einer Situation abhängt, und manchmal möchten Sie einen statischen Emitter, und manchmal wollen Sie es pro Instanz einer bestimmten Klasse erstellt. Aber der Punkt ist, dass, wenn möglich (wie in diesem Beispiel von Ihnen), nachdem Sie den Emitter von einer Festplatte ausgelagert haben, Sie ihn einfach wiederverwenden sollten (das heißt, Sie müssen denselben Emitter nicht mehrmals aus dem Archiv entfernen). Auf diese Weise wird das Lesen von der Festplatte auf ein Minimum reduziert, und es werden keine fps-Verluste auftreten. Wenn Sie die Emitter nicht sparsam einsetzen, besteht natürlich immer die Möglichkeit einer Verzögerung. Auch das Entfernen eines Emitters, wenn es mit dem Aussenden fertig ist, ist laut der Dokumentation eine gute Übung, also vergessen Sie nicht, dies auch zu tun.

Verwandte Themen