Wie erstelle ich eine Charakteranimation, bei der sich die Teile des Sprites ändern?

7

Angenommen, ich erstelle ein Spiel (in Java oder C ++). In diesem Spiel habe ich einen Charakter, der eine Schwertschwunganimation ausführen kann, aber der Charakter kann verschiedene Schwerter ausrüsten.

Muss ich für jedes einzelne Schwert eine Animation erstellen oder gibt es einen anderen Weg? Ich mag es, wenn ein Charakter verschiedene Rüstungen ausrüsten kann, erstelle ich für jede Rüstung ein neues Sprite oder gibt es eine Möglichkeit, beispielsweise einen Basischarakter zu haben, der alle Animationen mit verschiedenen Schwertern ausführen und verschiedene Rüstungen auf demselben Bild haben kann ?

MichaelHouse
quelle
Mögliches Duplikat: gamedev.stackexchange.com/questions/1335/…
MichaelHouse

Antworten:

9

Ja, Sie können dies auf relativ einfache Weise mithilfe von Transparenz tun.

Was Sie tun müssten, wäre, ein paar Schichten von Sprites anstelle von einer zu erstellen, die so vorbereitet und angeordnet sind, dass sie, wenn sie angezeigt werden, eine ganze Person bilden.

Ich habe ein Beispielbild angehängt, das zeigt, wie das aussehen könnte.

Beispiel

  1. Zeigt das Basisbild an, an dem ich gearbeitet habe
  2. Ich habe Teile entfernt, die sich nicht ändern werden
  3. Ich habe ein isoliertes Schwertbild gemacht
  4. So sieht das Schwert (diesmal Gold) aus, wenn es von 2 über das Bild gezogen wird. Glatt!

Jetzt können Sie Stahlschwerter einfach durch Goldschwerter ersetzen und müssen keine neuen Sprites mehr erstellen.

Wenn Sie sich an dieser Stelle eher wie ein Künstler fühlen

Dann ziehen Sie einfach ein paar (5-10) Schwertpositionen (vorberechnet). Dies hat den zusätzlichen Vorteil, dass Sie die Schwertform während der Bewegung ändern können und insgesamt bessere Ergebnisse erzielen können.

Die Anzahl der Animationsframes liegt natürlich bei Ihnen. Was bei dieser Methode wichtig ist, ist, dass Sie mit einer geeigneten Sprite-Delay-Engine (nicht so schwer zu schreiben) mehr Frames für Teile haben können, die sich schneller bewegen, und weniger für Teile, die sich langsamer bewegen.

Eine einfache Pseudocode-Implementierung könnte aussehen

// calculating each subpart
foreach(sprite_part in parts) 
    // first_not_less_than is usually called "lower_bound"
    sprite_num = time_data[sprite_part_num].first_not_less_than(time)
    sprite = spritesheet[sprite_part[sprite_num]];

Wenn Sie sich eher wie ein Programmierer fühlen

Beachten Sie, wie ich den ganzen Arm von der Basis entfernt habe. Sie können das Schwert leicht drehen, um die Bewegung zu simulieren. Dies erzeugt eine sehr flüssige Animation und erfordert nur Sprite, das in der Grundposition gezeichnet wurde, kann sich jedoch etwas weniger natürlich anfühlen.

Vergib mir, dass ich keinen .gifVergleich vorbereitet habe , aber ich bin kein Künstler :)

Dies ist zwar nur ein Beispiel, aber es steckt natürlich noch mehr dahinter. Bei einem Top-View-Spiel oder einem isometrischen Spiel kann ein anderer Ansatz sinnvoll sein. Diese Antwort soll nur die allgemeine Idee veranschaulichen.

Bartek Banachewicz
quelle