Ich versuche, meinem Spiel Wasser hinzuzufügen. Außer einer anderen Hintergrundfarbe gibt es nicht viel.
Allerdings möchte ich, dass player-sprite
darüber schwebt (oder halbwegs). Wenn der Spieler von unten in das Wasser läuft, möchte ich, dass er nach oben schwimmt. Wenn er hinfällt, möchte ich, dass er langsam die Richtung ändert und wieder hochfährt.
Ich habe versucht, die Schwerkraft negativ zu machen, wenn er im Wasser ist, aber das gibt mir ein paar leicht unerwünschte Effekte. Wenn er (der Spieler) zum Beispiel auftaucht, wird ihn die normale Schwerkraft zurückstoßen, das Wasser wird ihn hochschieben und so weiter. Letztendlich "springt" der Spieler im Wasser und wird von einem Ende zum anderen geschoben. Ich möchte, dass er ruhig oben auf dem Wasser bleibt, wenn er auftaucht. Wie kann ich das erreichen?
Hier ist der Code, den ich in meinem update-loop
:
Grundsätzlich ändert sich meine Gravitation in 2
, wenn der Spieler im Wasser ist, und ändert sich ansonsten in -4
, es sei denn, es ist bereits -4
.
Danke!
Es gibt drei mögliche Optionen, die Sie bezüglich der Simulation von Wasser haben.
1) Wie in den Kommentaren erwähnt, könnten Sie versuchen, SKFieldNode (iOS 8+) zu verwenden. Aber aus eigener Erfahrung hat der Feldknoten es nicht wirklich für mich gemacht, weil man mit ihm nur wenig Kontrolle über seine Simulation hat, es sei denn, man passe es stark an. In diesem Fall kann man seine eigenen Berechnungen von Grund auf durchführen und reduzieren Komplexität.
2) Sie können die lineare und rotatorische Dämpfung Ihres Sprites im Wasser einstellen. Tatsächlich erwähnt sogar Apple dies im Zitat ihrer Dokumentation. Das wird dir jedoch keinen Auftrieb geben.
Mit den Eigenschaften linearDamping und angularDamping wird berechnet Reibung am Körper, während er sich durch die Welt bewegt. Zum Beispiel, dies könnte verwendet werden, um Luft- oder Wasserreibung zu simulieren.
3) Führen Sie die Berechnungen selbst durch. Überprüfen Sie in der Update-Methode, wenn der Körper Sie "Wasser" eingibt, und wenn dies der Fall ist, können Sie die Viskosität und / oder den Auftrieb berechnen und die Geschwindigkeit Ihres Knotens entsprechend anpassen. Dies ist meiner Meinung nach die beste Option, aber auch die schwierigere.
Bearbeiten : Ich habe gerade ein schnelles Beispiel für Option 3 in Swift geschrieben. Ich denke, es ist das, wonach du suchst. Ich habe die Faktor-Konstanten oben hinzugefügt, damit du sie anpassen kannst, um genau das zu bekommen, was du willst. Die Bewegung wird dynamisch angewendet, so dass die aktuelle Geschwindigkeit nicht beeinträchtigt wird (d. H. Du kannst deinen Charakter im Wasser kontrollieren). Unten ist der Code für die Szene und ein GIF. Beachten Sie, dass die Deltazeit 60 Frames pro Sekunde (1/60) beträgt und keine Geschwindigkeitsklemmung vorliegt. Dies sind Funktionen, die Sie je nach Spiel verwenden können oder wollen.
Schnell
%Vor%Ziel-C
%Vor%Wenn dein Spieler Kontakt mit dem Wasser hat, schieb ihn hoch, bis er nicht mehr mit dem Wasser in Berührung kommt. Ändere zu diesem Zeitpunkt die Kontaktbitmaske des Spielers, um mit dem Wasser zu kollidieren und ihn "auf Wasser laufen zu lassen".
Alternativ können Sie die Modifizierung der Wasserkontaktbitmaske durch einen strategisch platzierten unsichtbaren Knoten auslösen, anstatt auf den Kontakt mit Wasser zu warten.
Um die Kontaktbitmaske des Players wieder auf normal zurückzusetzen, verwenden Sie einen anderen vorher festgelegten Kontakt, den der Spieler machen wird, wie zum Beispiel Land oder ein unsichtbarer Knoten als Auslöser.
Tags und Links ios sprite-kit game-physics