Je veux créer une série de motifs de balles en expansion qui forment des formes telles que des carrés, des triangles, etc. Un exemple de ce que je recherche peut être vu dans la vidéo suivante où lorsque les étoiles sont collectées, les balles explosent sous la forme d'un étoile en expansion:
12
Réponses:
La façon la plus simple de le faire serait de concevoir d'abord la forme, puis de calculer le mouvement des particules. Dans cette réponse, je construirai un carré, mais cela s'applique à n'importe quelle forme.
Commencez par concevoir votre forme comme des positions relatives autour d'un point d'origine.
Vous devez maintenant calculer la façon dont la forme va se développer. Pour ce faire, nous calculons simplement le vecteur pointant de
origin
à touspoint
en soustrayant laorigin
position de la nôtrepoint
puis en normalisant le vecteur.vector = normalize(point.x - origin.x, point.y - origin.y)
.Nous pouvons maintenant calculer la position des points à tout moment dans le temps en utilisant ce vecteur. Vous calculez la position suivante des points en faisant
point.position += point.vector * point.velocity
. Exemple de pseudocode utilisant notre point précédent:Faire cela déplacera tous les points vers l'extérieur à 3 unités chaque image.
Remarques
la source
Donc, il y a ce projet appelé BulletML qui est un langage de balisage pour créer des motifs de particules / puces complexes. Vous aurez presque certainement besoin de porter le code dans votre propre langue, mais cela peut faire des choses vraiment incroyables.
Par exemple, ce boss a été fait dans une extension (fortement modifiée) de BulletML pour Unity3D (l'auteur de ce modèle a téléchargé cette vidéo et Misery est fou, ainsi que la bonne 1 ). C'est la variation la plus difficile de cet ennemi et cela montre ce que BulletML est capable de faire assez bien (et consultez également certains des autres patrons de Misery, comme Wallmaster ).
Ou je peux montrer cet exemple, qui est un modèle que j'ai écrit en travaillant sur une expansion pour The Last Federation , en utilisant une ancienne version du système qui est moins adaptée aux mods et utilise uniquement des variables AZ à un seul caractère:
Les balles vertes qui font ces anneaux sont générées à partir d'une balle parent qui tourne à grande vitesse, mais elles-mêmes n'ont aucun mouvement. Ils infligent des dégâts massifs, gardant le joueur à une plus longue portée, les limitant à des armes à dégâts plus faibles et permettant aux défenseurs mobiles de harceler le joueur (le joueur a gagné si la structure immobile au milieu était détruite).
Voici une partie de la syntaxe XML qui crée ces bulles:
Vous pouvez voir quelques-uns des plans violets de "l'onde de gravité" dans la capture d'écran, qui se déplacent presque instantanément de la source (qui tourne) jusqu'au bord de la bulle, après quoi il déclenche le plan vert "barre incurvée", qui reste là pendant 12 secondes avant disparaître. Les plans bleus et jaunes que j'ai omis, car ils sont beaucoup plus compliqués.
L'un des autres motifs (un obus d'artillerie ) de l'expansion a été écrit par Misery, bien que j'y ai apporté quelques modifications. Au départ, c'est un tir pénétrant à faible dégâts qui vole à longue portée et explose ensuite en un énorme feu d'artifice, infligeant des tonnes de dégâts. Sa portée maximale était beaucoup plus élevée que ce que le joueur pouvait atteindre, forçant essentiellement le joueur à s'engager à courte portée, ce qui était avantageux pour les autres types d'unités PNJ en raison de l'effet de fusil de chasse (plus de balles regroupées dans une petite zone).
BulletML est facile à utiliser en général et peut faire des choses incroyables. Les balles peuvent changer de direction, changer de vitesse, engendrer d'autres modèles, mourir tôt, répéter la collecte de commandes dans une boucle, utiliser des retards, changer l'image de sprite de balle, suivre leur parent (ou non) ... Et tout ce que cela ne prend pas en charge, vous pourriez écrire dedans.
Je le recommanderais certainement si vous faites un jeu de tir sérieux. Vous auriez encore besoin de calculer les coordonnées pour obtenir les formes souhaitées, comme le dit Charanor dans sa réponse, mais un moteur de puces comme BulletML vous donnera tellement plus de flexibilité que vous passerez plus de temps à concevoir de nouveaux modèles qu'à trouver comment les coder.
la source
Comme l'a souligné Charanor, vous pouvez utiliser un tableau de points pour définir votre forme, puis mettre à jour leur position au fil du temps. Vous trouverez ci-dessous un exemple pratique de mise en œuvre d'une forme d'étoile ou d'une forme personnalisée à l'aide de points:
la source