Frage

Ich spiele diesem Flash-Spiel und nachdem ich ‚(lol, Feuer ') Reaktion begann ich d über die anfängliche bekommen‘ zu fragen, wie ich dieses Kontakt-mutiert Verhalten in der Programmierung replizieren konnte. Ich denke, es ist ein wenig wie die Honeypot xkcd .

Ich dachte, mit einem Szenario ausgehend, wo Teilchen einander und die Umfassungswände ablenken ab. Die Folge wäre mit einer festgelegten Anzahl von ‚mutierten‘ Teilchen beginnen, und wenn diese Mutanten mit regelmäßigen Teilchen kollidieren würden sie Mutanten selbst geworden. Ich könnte später in ein paar mehr Spaß Dinge funktionieren.

Mein Problem ist, wie man damit beginnen. Ich plane es in C # zu tun, um die Zeichnungselemente von .NET (obwohl ich zu C # ziemlich neu bin - wenn es ein anderer Teil von .NET ist soll ich mich wissen lassen), aber wenn es irgendwelche allgemeinen Papiere auf I Würd interessiert, sie zu lesen (wenn sie online natürlich sind).

Danke, Ross

War es hilfreich?

Lösung

Ich glaube, Sie auf dem richtigen Weg sind mit dem, was Sie denken, rel="nofollow einige Partikel in eine Box täte hier gut. Ich kann mir nicht vorstellen, dass Sie Papiere auf einem solchen spezifischen und einfachen Fall aber vielleicht für einige der erforderlichen Techniken finden würde, aber eine Implementierung des Backend sollte relativ einfach sein, im Vergleich zu einem Renderer.

Um die Teilchen um ein einfaches Verfahren zu bewegen ist Euler Iteration , wo Sie speichern die Positionen und Geschwindigkeiten. Position = Position + Geschwindigkeit * dt; wo dt die Änderung seit dem letzten Frame in der Zeit. Es ist am besten dt fixiert zu halten, und interpoliert zwischen den Punkten für den Renderer, wenn Sie können ... diese Stabilitätsprobleme reduzieren und Kollisionserkennung erleichtern.

an einem Teilchen weg von einer Wand reflektiert, überprüfen, ob seine Komponenten x oder y-Komponenten der Position wird die Grenzen und dann dreht das Vorzeichen der anderen Komponente der Geschwindigkeit überschreiten, z.

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;

Wenn Sie konstant dt haben, das funktioniert ganz gut, aber wenn es variiert werden Sie brauchen, um etwas komplizierter zu machen. finden den Kollisionspunkt mit der Box und reflektiert den Teil der Vektor außerhalb der Box in dem Gesicht, das wurde kollidierte mit.

Für die Teilchen miteinander eine Abstandsprüfung kollidiert ist wahrscheinlich am besten, die Auslösung Reflexion, wenn der Abstand zu klein ist. das heißt, wenn sie zu nahe sie kollidieren. Spiegelt die Geschwindigkeitskomponenten, als ob die Teilchen Kugeln waren, so dass die normale zur Reflexion ist die Differenz ihrer Positionen.

Sie können feststellen, diesem Artikel auf gamedev auch nützlich ...

Hope, das hilft.

Andere Tipps

Warum nicht einen Blick auf die klassischen Asteroids Spiel als Ausgangspunkt? Hier ist alink zu einem, die nicht DirectX nicht verwendet und ist in c #

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top