[Java] Java 2D "Shooter" - Schuss in gewisse Richtung lenken

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Affje800, 16. Februar 2012 .

  1. 16. Februar 2012
    Java 2D "Shooter" - Schuss in gewisse Richtung lenken

    Hallo,

    ich stehe momentan bei meinem Spiel vor einem Problem. Ich bastel gerade an einer Art Space-Shooter in 2D, das ganze mache ich in Java. Man lenkt mit den Tasten WASD sein Raumschiff und kann schießen. Kollisionserkennung, Gegner usw. funktioniert alles einwandfrei.
    Ich habe für die Schüsse eine extra Klasse mit der Methode move(). In Dieser wird im jetzigen Zustand lediglich die x- und y-Koordinate um 4 erhöht, d.h. der Schuss geht immer in dieselbe Richtung.
    Geplant ist das natürlich nicht so, der Schuss soll genau in die Richtung gehen, in wo die Maus gerade ist.
    Ich übergebe der Klasse Laser also die aktuelle Position des Schiffs und die Zielkoordianten, doch nun das Problem:
    Wie lenke ich den Schuss in diese Richtung? Ich muss ja bestimmt erstmal ne Fallunterscheidung machen, in welche Richtung das ganze gehen soll und dann mit Vektoren?

    Ich wäre über jede Hilfe dankbar.
     
  2. 16. Februar 2012
    AW: Java 2D "Shooter" - Schuss in gewisse Richtung lenken

    schau dir mal den midpoint algorythm an.
    Der ist dazu da um zwischen 2 beliebigen Punkten eine Linie zu zeichnen.

    Das dürfte dich und dein Problem ein ganzes Stück näher bringen.
     
  3. 16. Februar 2012
    AW: Java 2D "Shooter" - Schuss in gewisse Richtung lenken

    Sei die Position deines Raumschiffs (a,b) und die Position des Mauszeigers (c,d), dann erhälst du den Vektor mit (c-a,d-b). Das Geschoss wird sich dann wohl geradlinig in die Richtung bewegen.
    Daher kannst du die Position des Geschosses auf der Geraden berechnen mit
    (a,b) + X * (c-a,d-b)
    Dabei nennt man (a,b) dann Stützvektor und (c-a,d-b) Richtungsvektor der Geraden.
    Den Richtungsvektor müsstest du dann so skalieren, dass du im Zusammenspiel mit dem Intervall deiner Berechnung und der Variable X das Geschoss eine sinnvolle Entfernung zurücklegt.
    Dabei hilft dir die Länge des Vektors zu berechnen bei zB (g,h) mit sqrt(g^2 + h^2)

    Berechnest du zB 1 mal pro Sekunde den Zustand und das Geschoss soll pro Sekunde eine Entfernung von 1 (in der Einheit, welche du benutzt) zurücklegen, so rechnest du die Komponenten deines Richtungsvektor jeweils durch die Länge des Vektors um den Einheitsvektor zu erhalten (und benutzt den Einheitsvektor als Richtungsvektor) und für X setzt du jeweils aktuelle Zeit - Zeit des Abschusses. Dadurch kannst die aktuelle Position des Geschosses bestimmen.

    Der Midpoint Algorithmus ist eher dazu da um Linien zu rastern, also aus einer Funktion (zB einer Geraden) abzuleiten, wie die Pixel auf dem Bild aussehen müssen. Um die Position von Objekten zu bestimmen reicht Vektorrechnung aus.
     
  4. 17. Februar 2012
    AW: Java 2D "Shooter" - Schuss in gewisse Richtung lenken


    Perfekt, danke. Funktioniert nun
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.