Wie funktionieren Charakter / Objekt-Interaktionsanimationen in isometrischen Spielen?

10

Ich plane ein isometrisches Geschäftssimulationsspiel, bei dem der Spieler ein Büro mit den üblichen Möbeln wie Schreibtischen, Whiteboards usw. sieht.

Charaktere (Mitarbeiter / NPCs) im Spiel sollten mit diesen Objekten interagieren, indem sie einige vordefinierte Aufgaben ausführen, z. B. das Tippen auf der Tastatur am Schreibtisch oder das Schreiben auf das Whiteboard usw.

Was mich speziell interessiert, ist das folgende Szenario:

Der Charakter geht durch das Büro (1) zu seinem Schreibtisch (2), setzt sich und beginnt zu tippen (3).

Soweit ich weiß, hätte ich ein Sprite-Blatt für die Charakterbewegung (1) und ein statisches Sprite für den Schreibtisch (2), aber ich verstehe nicht ganz, wie der dritte Schritt behandelt werden würde.

Gibt es ein kombiniertes Sprite, das sowohl Schreibtisch als auch Charakter enthält? Ich nehme nicht an, sonst würde ich für jede Kombination aus Schreibtisch und Charakter ein Sprite-Blatt benötigen.

Wie wird das normalerweise gehandhabt?

BEARBEITEN:

Hier ist eine spezielle Beispielanimation aus dem Spiel Theme Hospital. Sie können das Video hier sehen .

Soweit ich sehen kann, ist die Animation in mehrere Schritte unterteilt.

Schritt 1 - Der Charakter bewegt sich zwischen Schreibtisch und Stuhl.

Geben Sie hier die Bildbeschreibung ein

Dies deutet darauf hin, dass Stuhl und Schreibtisch tatsächlich getrennte Sprites sind.

Schritt 2 - Der Charakter setzt die Animation

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, wie sich der Stuhl im allerletzten Rahmen näher am Schreibtisch befindet.

Schritt 3 - Schreibtischanimationen

Geben Sie hier die Bildbeschreibung ein

Schritt 4 - Stand-up-Animation

Ist das gleiche wie hinsetzen, aber umgekehrt gespielt.

Schritt 5 - Gehen Sie weg

Verwenden Sie die normale Bewegungsanimation, um sich zu entfernen.

Die Fragen, die ich habe, sind, wie diese Animationen am besten getrennt werden und wie ein Grafiker diese Animationen normalerweise bereitstellen würde.

Sitzt und tippt der Charakter auf dem Schreibtisch tatsächlich drei verschiedene Sprites (Schreibtisch, Charakter und Stuhl)? Kennt jemand ein Beispiel für Sprites ähnlicher Animationen?

EDIT 2:

Ich denke, meine größte Sorge ist, dass ich die richtigen Erwartungen habe, wie die Sprites tatsächlich aussehen werden. Ich kann sie nicht selbst zeichnen, daher muss ich jemanden dafür bezahlen, und ich gehe davon aus, dass es eine Art Best-Practice-Methode gibt, um diese Art von Animationen zu erstellen.

Patrick Klug
quelle

Antworten:

8

Kurze Antwort? Kombiniere keine Sprites.
Das heißt, wenn Sie kombinieren, müssen Sie die Animation für jede einzelne Kombination haben. Scheint seltsam, wenn Sie nur einen Stuhl wollen. Aber lassen Sie uns so tun, als könnte Ihr Büro im mittleren Spiel erweitert werden, wo die Stühle jetzt einen schöneren Sprite haben. Würden Sie einfach ein Stuhl-Sprite hinzufügen oder werden Sie die Animation jedes Arbeitgebers neu kombinieren und erneut hinzufügen?

Lass uns ein paar Berechnungen machen.

Stellen Sie sich vor, Sie haben 6 Sprites auf einem Arbeitgeber, der eine Schreibanimation sitzt, Sie haben 5 verschiedene Stühle und 10 verschiedene Arbeitgeber.

Wenn Sie nur den Arbeitgeber auf den Stuhl ziehen, werden 10 * 6 + 5 Sprites, 65 Sprites benötigt.
Wenn Sie kombinieren und jede Kombination erstellen, werden 10 * 6 * 5 Sprites benötigt, dh 300 Sprites. Es wird Ihnen so schwer fallen, ein so großes Spritesheet für eine einfache Animation zu erstellen!

BEARBEITEN:

Wenn Sie nicht wissen, wie es geht, ist es besser, Ihren Stuhl als Hintergrund und das Personal als aktive Sprites zu definieren. Einfacher für Sie.

Background.draw();
Foreach(employer i in staff)
    I.draw();

Dadurch sollten Ihre Mitarbeiter von Ihrem Chais (Hintergrund) getrennt bleiben. Aktualisieren Sie auch die Frames der Mitarbeiteranimation unabhängig.

EDIT2:

Ich habe deine Bearbeitung und deine Beispiele gesehen. Ich würde den gleichen Ansatz beibehalten. Alle verschiedenen Sprites. Der Stuhl würde sowieso vor den Charakter gehen!

Um den Stuhl näher zu bewegen, aktualisieren Sie seine Position auf einige Pixel nach oben und links oder tun Sie dies auf dem Sprite selbst.

Verstehst du Z Align? das sollte eine Menge Dinge spielen ...

Sie können sehen, dass einige Teile des Stuhls hinter dem Charakter bleiben, andere erscheinen vorne. Wie ist das möglich, wenn es nur ein Sprite ist? Z ausrichten!

Zwei Möglichkeiten, um den Effekt zu erzielen. Behalte eine Maske (nicht so einfach) oder teile dein Sprite in zwei Teile.

Ich werde nur die zweite Methode erwähnen, da ich jetzt nicht viel Zeit habe. Sie sollten Ihr Stuhlsprite in die Teile schneiden, die sich vorne befinden würden, und in die Teile, die sich dahinter befinden. Dann bringen Sie sie in die gleiche Position. einfach! Was spielt, ist das Z Align hier. Die Teile dahinter sollten hinten gezeichnet werden, der Charakter in der Mitte und die Teile des vorderen Stuhls vorne.

Ich weiß nicht, welche lib / api / sdk / toolset Sie verwenden. Aber die meisten tun dies auf diese Weise: Verwenden Sie den az-Ausrichtungsfaktor, der bestimmt, was hinten oder vorne ist oder was zuerst gezeichnet wird, was zuletzt gezeichnet wird, was zuletzt gezeichnet wird. Sie sollten dies also berücksichtigen.

Gustavo Maciel
quelle
ja dank. Das habe ich auch gedacht, aber ich verstehe nicht, wie die Animationen dann erreicht werden würden. Kennen Sie ein Beispiel, das ich mir ansehen könnte? das wäre am besten!
Patrick Klug
Meinst du Code oder ein Spiel? Wenn Sie ein Spiel möchten, versuchen Sie, Game Dev Story von Kairosoft für Android und iOS zu sehen. Codebeispiel weiß ich nicht ...
Gustavo Maciel
Antwort überarbeitet. Sehen Sie, ob es Ihren Bedürfnissen entspricht (:
Gustavo Maciel
Ich habe meine Frage mit einem bestimmten Beispiel aktualisiert. Ich bin wirklich interessiert daran, wie die Sprites aussehen würden oder welche Grafiker sie bereitstellen. Die Animationen von GameDev Story sind etwas zu simpel für das, was ich vorhabe.
Patrick Klug
Lesen Sie Bearbeiten 2, ich habe die Antwort verbessert, hoffe, es deckt Ihre Bedürfnisse.
Gustavo Maciel
2

Eine alternative Idee wäre, Ihren Sprites ein Tiefen- / Z-Pufferbild hinzuzufügen, ähnlich wie 3D-APIs (OpenGL) sicherstellen, dass sich Polygone nicht überlappen. Für ein einfaches Sprite-Spiel kann es sich nur um ein Bündel von 0/1 Bits (Schwarz-Weiß-Bitmap) handeln (obwohl Sie bei Bedarf mehr Tiefenstufen verwenden können).

Wenn Sie ein kombiniertes "Schreibtischstuhl" -Sprite haben und möchten, dass der Stuhl vor anderen Sprites (dh Personen) auf diesem Quadrat erscheint, würden Sie die Z-Buffer-Version des Zeichens "schwarz" machen, während der Schreibtisch "weiß" wäre. .

Wenn Sie das dynamische Sprite (eine Person) auf dieser Kachel rendern, wird überprüft, welche Farbe sich im Tiefenpuffer befindet. Bei Pixeln, die 0 (schwarz) sind, überspringen Sie das Zeichnen der Sprites-Pixel der Person und lassen die Stuhlpixel dort.

Anstatt jedes Pixel 1 gleichzeitig zu überprüfen, besteht eine einfachere Möglichkeit, die Überprüfung durchzuführen, darin, die Sprite-Pixel mit dem Tiefenpufferwert zu multiplizieren, da die nähere Tiefe 0 wäre, und die zu löschen. Dann müssen Sie natürlich einen Farbschlüssel eingeben (es sei denn, Sie haben einen Alpha-Farbkanal).

Dies erhöht natürlich den Overhead (obwohl Sie ihn für alles überspringen können, das nicht mehrere Tiefenstufen benötigt, wie z. B. einen Schreibtischstuhl). Sie müssen auch Ihre Animationen synchronisieren (dh die Person müsste mit der Schreibtischstuhlanimation übereinstimmen). Es gibt Ihnen nicht die gleiche Flexibilität, nur eine ganze Reihe separater Sprites zu haben.

David C. Bishop
quelle
Die Tiefenebene mit Maske, die ich in meiner Bearbeitung erwähnt habe (:
Gustavo Maciel