Question

Je joue à ce jeu flash et après. Après avoir surmonté la réaction initiale («lol, feu»), j'ai commencé à me demander comment reproduire ce comportement de contact-mutant en programmation. Je suppose que c'est un peu comme le honeypot xkcd .

Je pensais commencer par un scénario dans lequel les particules se détournent les unes des autres et des murs de confinement. La séquence commencerait par un nombre défini de particules «mutantes» et, lorsque ces mutants entreraient en collision avec des particules régulières, ils deviendraient eux-mêmes des mutants. Je pourrais travailler à des choses plus amusantes plus tard.

Mon problème est de savoir comment s'y prendre. Je prévois de le faire en C # en utilisant les éléments de dessin de .NET (bien que je sois assez nouveau en C # - s’il existe une partie différente de .NET, j’aimerais utiliser, laissez-moi savoir), mais s’il existe des documents généraux à ce sujet, je je serais intéressé de les lire (s’ils sont disponibles en ligne bien sûr).

Merci, Ross

Était-ce utile?

La solution

Je pense que vous êtes sur la bonne voie avec ce que vous pensez, des particules dans une boîte ferait bien ici. Je ne peux pas imaginer que vous trouviez des articles sur un cas aussi simple et spécifique, mais peut-être sur certaines des techniques requises, mais une implémentation du backend devrait être relativement simple comparée à un moteur de rendu.

Pour déplacer les particules autour d'une méthode simple, utilisez la itération d'Euler , dans laquelle vous stockez les positions et les vitesses. position = position + vitesse * dt; où dt est le changement de temps depuis la dernière image. Il est préférable de garder dt fixe et d'interpoler les points du rendu si cela est possible ... cela réduira les problèmes de stabilité et facilitera la détection des collisions.

Pour refléter une particule sur un mur, vérifiez si ses x composantes ou y composantes de position dépasseront les limites, puis inversez le signe de l'autre composante de la vitesse, par exemple.

if(Math.Abs(position.x_component + velocity.x_component * dt) > x_bound) 
    velocity.y_component = -velocity.y_component;

if(Math.Abs(position.y_component + velocity.y_component * dt) > y_bound)
    velocity.x_component = -velocity.x_component;

Si vous avez dt constant, cela fonctionne assez bien, mais si cela varie, vous devrez faire quelque chose de plus compliqué. recherchez le point de collision avec la boîte et reflète la partie le vecteur en dehors de la boîte dans le visage qui a été entré en collision.

Pour une collision des particules, une vérification de la distance est probablement préférable; elle déclenche une réflexion lorsque la distance est trop petite. c'est-à-dire que s'ils se rapprochent trop, ils entrent en collision. Réfléchissez les composantes de la vitesse comme si les particules étaient des sphères. La réflexion normale est donc la différence de leurs positions.

Vous pouvez trouver cet article sur gamedev utile aussi ...

J'espère que cela vous aidera.

Autres conseils

Pourquoi ne pas jeter un coup d’œil sur le jeu classique Asteroids? Voici un lien vers celui qui n’utilise pas DirectX et qui est en c #

http://www.codeproject.com/KB/GDI-plus /asteroids.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top