Comment fonctionnent les animations d'interaction personnage / objet dans les jeux isométriques?

10

Je prévois un jeu de simulation d'entreprise isométrique où le joueur voit un bureau avec les meubles habituels tels que des bureaux, des tableaux blancs, etc.

Les personnages (personnel / PNJ) du jeu doivent interagir avec ces objets en effectuant certaines tâches prédéfinies telles que taper sur le clavier au bureau ou écrire sur le tableau blanc, etc.

Ce qui m'intéresse, en particulier, c'est le scénario suivant:

Le personnage se déplace dans le bureau (1) jusqu'à son bureau (2) et s'assoit et commence à taper (3).

D'après ce que je comprends, j'aurais une feuille de sprite pour le mouvement du personnage (1) et un sprite statique pour le bureau (2) mais je ne comprends pas très bien comment la troisième étape serait gérée?

Existe-t-il un sprite combiné qui contient à la fois un bureau et du caractère? Je suppose que non, sinon j'aurais besoin d'une feuille de sprite pour chaque combinaison de bureau et de personnage.

Comment est-ce normalement géré?

ÉDITER:

Voici un exemple d'animation spécifique du jeu Theme Hospital. Vous pouvez voir la vidéo ici .

Pour autant que je puisse voir, l'animation est divisée en plusieurs étapes.

Étape 1 - Le personnage se déplace entre le bureau et la chaise.

entrez la description de l'image ici

Cela suggère que la chaise et le bureau sont en fait des sprites séparés.

Étape 2 - Animation du personnage assis

entrez la description de l'image ici

Remarquez comment, dans le dernier cadre, la chaise est plus proche du bureau.

Étape 3 - Animations de bureau

entrez la description de l'image ici

Étape 4 - Animation debout

C'est la même chose que s'asseoir mais joué à l'envers.

Étape 5 - Éloignez-vous

Utilisez l'animation de déplacement normal pour vous éloigner.

La question que je me pose est de savoir comment séparer au mieux ces animations et comment un graphiste fournirait-il habituellement ces animations?

Le personnage assis et tapant sur le bureau est-il en fait trois sprites différents (bureau, personnage et chaise)? Est-ce que quelqu'un connaît des exemples de sprites d'animations similaires?

EDIT 2:

Je suppose que ma plus grande préoccupation est que j'ai les bonnes attentes sur l'apparence réelle des sprites. Je ne peux pas les dessiner moi-même, donc je devrai payer quelqu'un pour le faire et je suppose qu'il existe une sorte de meilleure pratique pour faire ce genre d'animations?

Patrick Klug
la source

Réponses:

8

Réponse courte? Ne combinez pas les sprites.
Autrement dit, si vous combinez, vous devrez avoir l'animation pour chaque combinaison unique. Cela semble étrange si vous ne voulez qu'une seule chaise. Mais supposons que votre bureau puisse être agrandi au milieu du jeu, où les chaises ont maintenant un sprite plus agréable. Souhaitez-vous simplement ajouter un sprite de chaise, ou allez-vous vous recombiner et ajouter à nouveau toute l'animation de chaque employeur?

Permet de faire quelques calculs.

Imaginez que vous avez 6 sprites sur une animation de dactylographie assis par un employeur, vous avez 5 chaises différentes et 10 types d'employeurs différents.

Si vous dessinez simplement l'employeur sur la chaise, cela prendrait 10 * 6 + 5 sprites, 65 sprites.
Si vous combinez et faites chaque combinaison, cela prendrait 10 * 6 * 5 sprites, soit 300 sprites. Ce sera si difficile pour vous de créer une feuille de sprites aussi grande pour une simple animation!

ÉDITER:

Eh bien, si vous ne savez pas comment, il serait préférable de définir votre chaise comme arrière-plan et le personnel comme des sprites actifs. Plus facile pour vous.

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

Cela devrait garder votre personnel séparé de vos chais (arrière-plan). Mettez également à jour les images de l'animation du personnel de manière indépendante.

EDIT2:

J'ai vu ton montage et tes samples. Je garderais la même approche. Tous les sprites différents. La chaise irait quand même devant le personnage!

Pour rapprocher le fauteuil, mettez à jour sa position à quelques pixels vers le haut et vers la gauche, ou faites-le sur l'image-objet elle-même.

Comprenez-vous à propos de l'alignement Z? cela devrait jouer beaucoup de choses ...

Vous pouvez voir que certaines parties de la chaise restent derrière le personnage, d'autres apparaissent devant. Alors, comment est-ce possible si ce n'est qu'un sprite? Z align!

Deux façons d'obtenir l'effet. Gardez un masque (pas si simple) ou divisez votre sprite en deux.

Je vais juste mentionner la deuxième méthode, car je n'ai pas beaucoup de temps maintenant. Vous devriez couper votre sprite de chaise, dans les parties qui seraient à l'avant et ce qui sera derrière. Mettez-les ensuite dans la même position. facile! Ce qui joue est le Z Align ici, les parties derrière doivent être tirées derrière, le personnage au milieu et les pièces de la chaise avant à l'avant.

Je ne sais pas quel lib / api / sdk / toolset vous utilisez. Mais le plus est le suivant: utilisez un facteur d'alignement az qui détermine ce qui est derrière ou ce qui est devant ou ce qui est tiré en premier, derrière, ce qui a été tiré en dernier devant. Vous devez donc garder cela à l'esprit.

Gustavo Maciel
la source
Oui merci. Je le pensais aussi mais je ne comprends pas comment les animations seraient alors réalisées. connaissez-vous un exemple que je pourrais regarder? ce serait mieux!
Patrick Klug
Vous voulez dire du code ou un jeu? Si vous voulez un jeu, essayez de voir Game Dev Story par Kairosoft pour Android et iOS. Exemple de code que je ne connais pas ...
Gustavo Maciel
Réponse révisée. Voyez si cela correspond à vos besoins (:
Gustavo Maciel
J'ai mis à jour ma question avec un exemple spécifique. Je suis vraiment intéressé par l'apparence des sprites ou par ce que les graphistes ont l'habitude de fournir. Les animations de GameDev Story sont un peu trop simplistes pour ce que je pense.
Patrick Klug
Lisez Edit 2, j'ai amélioré la réponse, j'espère que cela répond à vos besoins.
Gustavo Maciel
2

Une autre idée serait d'inclure une image Buffer Depth / Z avec vos sprites, similaire à la façon dont les API 3D (OpenGL) garantissent que les polygones ne se chevauchent pas. Pour un jeu de sprite de base, cela pourrait être juste un tas de bits 0/1 (bitmap noir et blanc) (bien que vous puissiez utiliser plus de niveaux de profondeur si vous le souhaitez).

Si vous avez un sprite combiné de «chaise de bureau» et que vous souhaitez que la chaise apparaisse devant d'autres sprites (c'est-à-dire des personnes) sur cette place, vous feriez la version Z-Buffer du char «noir» tandis que le bureau serait «blanc» .

Lorsque vous effectuez le rendu de l'image-objet dynamique (une personne) sur cette vignette, elle vérifie la couleur du tampon de profondeur. Pour les pixels qui sont 0 (noir), vous sautez le dessin des pixels des sprites de la personne et laissez simplement ceux du fauteuil là-bas.

Plutôt que de vérifier chaque pixel 1 à la fois, une façon plus simple de faire la vérification serait de multiplier les pixels de l'image-objet par la valeur de la mémoire tampon de profondeur, car la profondeur la plus proche serait 0 et d'annuler le. Ensuite, bien sûr, vous devez colorkey (sauf si vous avez un canal de couleur alpha).

Bien sûr, cela ajoute des frais généraux (bien que vous puissiez l'ignorer pour tout ce qui n'a pas besoin de plusieurs niveaux de profondeur comme une chaise de bureau). Vous devez également synchroniser vos animations (c'est-à-dire que la personne devra correspondre avec l'anim de la chaise de bureau). Cela ne vous donne pas la même flexibilité que d'avoir tout un tas de sprites séparés.

David C. Bishop
la source
La couche de profondeur avec masque que j'ai mentionnée dans mon montage (:
Gustavo Maciel