2010-06-10 15 views
3

Comment fonctionnent les sprites?Comment fonctionnent les sprites?

J'ai vu des sprites de jeux old school comme Super Mario Brothers, et je me demandais comment ils étaient animés pour faire un jeu.

Ils sont toujours présentés comme une grande carte-image, alors comment sont-ils utilisés?

Pour Mario (à titre d'exemple) y a-t-il des coordonnées d'image précalculées qui décrivent mario, et sont échangées entre divers sprites mario pour produire de l'animation?

Ou les sprites sont-ils pré-coupés pendant l'initialisation du jeu en utilisant des coordonnées d'images précalculées et stockées en mémoire quelque part?

Évidemment, je ne connais rien au développement de jeux.

+3

Il existe actuellement un article complet sur wikipedia. http://en.wikipedia.org/wiki/Sprite_%28computer_graphics%29 –

Répondre

3

Sur de nombreux anciens systèmes de jeux vidéo et d'ordinateurs, les sprites étaient une fonctionnalité matérielle qui superposait de petites images sur un écran plus grand. Bien que l'Atari 7800 ait eu une implémentation semblable à celle décrite dans l'article Wikipedia, il était pratiquement unique à cet égard. La plupart des systèmes de sprites utilisaient un groupe de circuits distinct pour chaque sprite qu'ils pouvaient afficher sur une ligne de balayage, y compris un déclencheur de position horizontale et un registre à décalage ou d'autres moyens d'envoyer des données de manière séquentielle. Lorsque le balayage de trame atteignait l'emplacement approprié sur une ligne, le circuit commençait à décaler les données de forme pour l'image-objet.

Certaines machines (comme l'Odyssey2) incluses dans le matériel de la puce vidéo pour conserver les formes de tous les sprites sur l'écran. L'Atari 2600 ne contenait que 8 bits de données de forme pour chaque sprite, et demandait au processeur de charger les données en temps réel n'importe où il était censé changer. Le modèle le plus commun, cependant, était que la puce vidéo synchronise automatiquement les données d'image-objet de la mémoire. Généralement, le matériel s'attend à ce que les données soient dans un format particulier ou, dans certains cas, dans l'un des deux formats.

Sur certaines machines, le nombre de sprites pouvant s'afficher simultanément sur une trame sans intervention de l'UC est égal au nombre de circuits d'image-objet. D'autres machines ont un petit nombre de circuits d'image-objet, mais peuvent afficher plus de sprites; Dès qu'un circuit termine l'affichage d'une image-objet, il charge les paramètres de l'image-objet suivante de la mémoire. Le NES correspond à ce modèle.

3

http://en.wikipedia.org/wiki/Sprite_(computer_graphics)

Bien que l'article ne semble pas parler de votre question, maintenant que je regarde à travers soigneusement ...

Quoi qu'il en soit, il peut probablement être fait de toute façon, mais si je J'ai toujours dû implémenter un gestionnaire d'image-objet J'irais probablement avec la méthode de division (bien que comme indiqué dans une autre réponse, la méthode de référence-coordonnée serait probablement plus facile à implémenter pour une animation simple).

1

Vous pouvez faire les deux, cela dépend du développeur. Si elles sont stockées comme une seule grande image, vous calculez la coordonnée de la trame que vous voulez et la transférez à l'écran, ou l'écran arrière pour les écrans à double tampon.

Ou vous pouvez prédécoupées la grande image en images séparées, cela prend un peu plus de mémoire, mais rase un peu de temps à l'exécution

Il peut y avoir plusieurs sprites en une seule image. Peut-être dans une seule rangée, ou dans une grille. Ils peuvent même avoir été dessinés comme une grille, et simplement découpés dans un seul bloc.

1

Les sprites dans l'image sont généralement de la même taille et leur position correspond au numéro de l'image dans l'animation. De cette façon, la création de l'animation implique généralement rien de plus que simplement augmenter un décalage et écrêter l'image bitmap pour montrer l'image suivante.

+0

Y a-t-il plusieurs couches de sprites composées ensemble? – Alan

+0

Cela dépend du type d'animation que l'on veut faire. Si vous voulez animer plusieurs objets indépendamment, alors oui, vous avez plusieurs couches de sprites. –

1

La grande image de la première technique est appelée atlas et est généralement beaucoup plus efficace que la création d'une entité pour chaque image-objet. La technique offset décrite par Franci fonctionne très bien la plupart du temps, mais pour les situations critiques, il est préférable d'utiliser des programmes d'emballage de texture tels que Zwoptex. La plupart de ces programmes calculent les coordonnées automatiquement pour vous. Analyser le fichier meta sur init et mettre en cache les coordonnées.

1

Les consoles 2D comme la NES et la DS décomposent les images en une hiérarchie à deux niveaux. Au fond est un tileset. Un tileset est une collection indexée d'images de 8x8 pixels. Un tileset sera chargé lors du chargement du niveau, généralement dans une partie de la mémoire dédiée aux graphiques.

Les sprites et les niveaux sont ensuite construits par-dessus. Un sprite pour quelque chose comme un personnage de 32x64 pixels est divisé en tuiles 4x8. Pour définir une image-objet maintenant, il vous suffit de 32 valeurs pour identifier les index des pièces qu'elle utilise. Très efficace en mémoire. Les différents cadres d'animation et les sprites peuvent désormais réutiliser les mêmes mosaïques en économisant des tonnes de mémoire.

Maintenant, pour que le jeu dessine un sprite, il ne fait que regarder les tuiles à chaque index pour le sprite et les dessine à la bonne position sur l'écran. Le matériel de console lui-même gère habituellement ceci, qui est comment vous pouvez obtenir des graphiques étonnamment bons sur le matériel très limité (le NES original avait un processeur de 1.67 mégahertz et seulement 4k de RAM).