Auf das Thema antworten  [ 1 Beitrag ] 
Streuschuss 
Autor Nachricht
Administrator
Benutzeravatar

Registriert: Sa 15. Dez 2012, 19:15
Beiträge: 137
Wohnort: Karlsruhe
Mit Zitat antworten
Hallo Leute!

Möchte man, dass wilde Ballerei sich in verringerter Präzision niederschlägt, dann muss man mithilfe eines Streufaktors eine Streuung erwirken. Hier ein Beispiel, wie man so etwas realisieren könnte:

Code:
 
internal static Vector2 Streuschuss(Vector2 start, Vector2 ziel, int streuung)
{
        if (streuung <= 0) return new Vector2(ziel.X - start.X, ziel.Y - start.Y);
 
        float angle = (float)Draw2D.Angle(start, ziel);
        Vector2 normal = Draw2D.Point(start, angle, 1000f);
        int addX = rdm.Next(0, streuung * 2) - streuung;
        int addY = rdm.Next(0, streuung * 2) - streuung;
        return new Vector2(normal.X - start.X + addX, normal.Y - start.Y + addY);
}
 

Zurückgegeben wird ein Bewegungsvektor für das Geschoss. Die Methoden Draw2D.Angle und Draw2D.Point findet ihr in diesem Beitrag. Die Variable rdm ist eine Instanz der Klasse System.Random.

Zunächst wird festgestellt, ob es überhaupt eine Streuung geben soll. Wenn nicht, wird ein Bewegungsvektor ohne Streuung zurückgegeben. Um eine einheitliche Streuung zu erreichen, muss man bei dieser Lösung nun den Winkel und ein normalisierter Punkt berechnet werden. Denn im nächsten Schritt werden diesem normalisierten Punkt X- und Y-Werte, abhängig von der Streuung, hinzugerechnet. Damit das funktionieren kann, muss die Zielposition immer gleich weit weg sein (hier 1000). Sonst wird die Streuung bei gleichem Wert bei verringerter Entfernung stärker und bei erhöhter Entfernung geringer.


Schöne Grüße,
Magony

_________________
Bei Fragen, Lob, Kritik, Vorschläge, hilfreiche Hinweise oder Alternativvorschläge: Beitrag, neues Thema oder PN.
Für Dinge die diskutiert werden sollten, bitte neues Thema im jeweiligen Forum.
Wenn du nicht weißt wohin: Forum Unsortiert.


Sa 13. Apr 2013, 22:28
Diesen Beitrag melden
Profil Website besuchen
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Auf das Thema antworten   [ 1 Beitrag ] 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst neue Themen in diesem Forum erstellen.
Du darfst Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software
Deutsche Übersetzung durch phpBB.de

Impressum