2009-08-14 5 views
2

Je travaille actuellement sur un jeu 2D en vue de haut en bas et j'apprends énormément sur la manipulation des sprites et des sprites. Ma question est comment gérer un ensemble de sprites qui peuvent être tournés dans 32 directions.Quelle est la meilleure façon de gérer les sprites tournants pour un jeu de vue de haut en bas

Au moment où un objet donné a sa feuille de sprite avec toutes les animations orientées avec l'objet pointant à 0 degrés à tout moment. Maintenant, puisque l'objet peut pivoter dans 32 directions, quelle est la meilleure façon de travailler avec cette feuille de sprite originale. Ma meilleure estimation actuelle est que le programme crée de façon dynamique 32 autres feuilles de sprites lorsque l'objet est chargé pour la première fois dans le jeu, puis toutes les instances suivantes de ce type d'objet partageront ces feuilles de sprites.

De toute façon, tout conseil à cet égard serait utile. Faites-moi savoir si j'ai besoin de reformuler la question, je connais son genre d'une étrange. Merci

Modifier: Je suppose pour plus de clarification. Si j'ai, par exemple, un objet qui a 2 animations de 5 images a peice, c'est une feuille de sprites assez facile à créer et à organiser, c'est une simple grille 2x5 (ou 5x2 selon la disposition). Mais le problème est que maintenant ces 2 animations doivent être tournées dans 32 directions. Cela signifie qu'à la fin il y aura 320 sprites individuels. Je vais le dire (et corrigez-moi si je me trompe) car je suis préoccupé par les performances et la cadence, la rotation des sprites à la volée chaque image n'est pas une option. Alors, comment ces 320 sprites qui composent ces 2 animations devraient-ils être organisés? Ne serait-il préférable de

  • y penser comme 32 feuilles de sprites 2x5
  • diviser la feuille d'image-objet en trames individuelles, et ensuite un tableau des 32 directions différentes par trame (donc 10 rangées de 32 sprites directionnels
  • Autre ....?
  • Peu importe?

Merci

Répondre

1

Généralement, vous sacrifiez le temps processeur ou la mémoire et vous devez équilibrer les deux. À moins que vous ayez de grandes limites à votre processeur ou que vous calculiez beaucoup de choses coûteuses, il n'y a aucune raison de mettre tout cela dans la mémoire. La rotation de quelques sprites avec une transformation est assez bon marché pour que ça ne vaille pas la peine de stocker 32 fois plus d'informations en mémoire - surtout parce que cette information est un tas d'images, et les images utilisent beaucoup de mémoire, relativement parlant.

2

Vous pouvez simplement tourner les sprites directement en réglant la partie rotation du sprite transform de.

Pour un exemple de code, consultez l'image-objet Chimp dans ce pygame tutorial. Il fait tourner les sprites quand le chimpanzé est "étourdi".

+0

Très bien, je veux dire que ça fonctionne. Mais honnêtement, je le faisais déjà, je suppose que ma question est de savoir comment organiser les sprites et leurs rotations de la manière la plus efficace ... peut-être que j'ai besoin de le reformuler –

4

Les 32 directions du sprite se traduisent par 32 rotations de 11,25 degrés.

Vous pouvez réduire le nombre d'images précalculées à 8, vous calculez uniquement les 90 premiers degrés (11.25, 22.5, 33.75, 45.0, 56.25, 67.5, 78.75, 90.0) et utilisez dynamiquement les opérations de retournement. Les flips sont beaucoup plus rapides car ils ne font que modifier l'ordre dans lequel une image est copiée du tampon. Par exemple, lorsque vous affichez une image pivotée de 101,25 degrés, chargez l'image précalculée de 67,5 degrés et retournez-la verticalement.

Je viens de réaliser que cela ne fonctionne que si votre image est symétrique ;-)

Quand on parle d'un ordinateur moderne, vous ne pourriez pas besoin d'optimiser quoi que ce soit. La mémoire utilisée par le précalcul des sprites est certainement négligeable, et l'utilisation du processeur lors de la rotation de l'image probablement aussi. Cependant, lorsque vous programmez un périphérique intégré, cela importe.

+0

Je ne sais pas pourquoi cela ne m'est pas venu à l'esprit à seulement préroté les 90 premiers degrés. Bien pensé ;) –

Questions connexes