2D-Grafik Winkelberechnungen auf 2D Grafik

  • Themenstarter SalazarSlytherin
  • Beginndatum
Diskutiere Winkelberechnungen auf 2D Grafik im AWT, Swing, JavaFX & SWT Bereich.
S

SalazarSlytherin

Moin,

und zwar bastel ich zurzeit an einem Pong-Spiel, wie so viele wohl vorher auch.
Es funktioniert soweit auch alles und ist super, aber bei dem Ein- und Austrittswinkel weiß ich mir nicht mehr zu helfen.

Ich möchte quasi abfragen, wo der Ball auf dem Schläger auftritt und je nachdem den Ausfallswinkel ändern.
Aber dafür müsste ich ja die Möglichkeit besitzen mit dem Datentyp double zu zeichnen. Egal ob ich ein Rechteck oder Kreis zeichne, das funktioniert nur mit integern.
Aktuell fliegt der Ball immer, indem ich x und y im Gleichschritt erhöhe nach jedem Timer-Aufruf.

Die Lösung ist aktuell dass, wenn der schläger am Rand auftritt zum Beispiel folgendes passiert:

- y = y +2ya
- x = x +xa

Somit verändert man schon den Winkel, aber halt auch die Geschwindigkeit des Balles, die ich jetzt als nachträgliches "Level" nachfügen wollte...


Hier der aktuelle Code, in dem ich den Winkel verändere nach Auftreffen.

Danke schonmal im vorraus!

Java:
public void checkCollision() {
      
      
        //Abfrage ob der Ball auf den Schläger trifft
        if (game.getPanel().getPlayer().getBounds().intersects(getBounds()) || game.getPanel().getPlayer2().getBounds().intersects(getBounds())) {
          
            //Bacllwechselzähler
            ballwechsel++;
          
            if (level == 1) {
                //Abfrage wo der Ball auf den rechten Schhläger trifft
                if(xa > 0) {
          
                    if(y >= game.getPanel().getPlayer().getY() &&  y < game.getPanel().getPlayer().getY() +20 ) {   xa =-1; ya=-3;  }
                    else if(y >= game.getPanel().getPlayer().getY() +20  && y < game.getPanel().getPlayer().getY()+40) {   xa =-1; ya=-2;  }
                    else if(y >= game.getPanel().getPlayer().getY()+40 && y < game.getPanel().getPlayer().getY()+60) {   xa =-1; ya=-1;  }
                    else if(y == game.getPanel().getPlayer().getY()+60) {   xa =-1; ya = 0; }
                    else if(y >= game.getPanel().getPlayer().getY()+60 && y < game.getPanel().getPlayer().getY()+80) {   xa =-1; ya=1; }
                    else if(y >= game.getPanel().getPlayer().getY()+80 && y < game.getPanel().getPlayer().getY()+100) {   xa =-1; ya=2;  }
                    else if(y >= game.getPanel().getPlayer().getY()+100 && y <= game.getPanel().getPlayer().getY()+120) {   xa =-1; ya=3;  }
          
                }
                //Abfrage wo der Ball auf den linken Schläger trifft
                else if(xa < 0 ){
              
                    if(y >= game.getPanel().getPlayer2().getY() &&  y < game.getPanel().getPlayer2().getY() +20 ) {   xa =1; ya=-3;  }
                    else if(y >= game.getPanel().getPlayer2().getY() +20  && y < game.getPanel().getPlayer2().getY()+40) {   xa =1; ya=-2;  }
                    else if(y >= game.getPanel().getPlayer2().getY()+40 && y < game.getPanel().getPlayer2().getY()+60) {   xa =1; ya=-1;  }
                    else if(y == game.getPanel().getPlayer2().getY()+60) {   xa =1; ya = 0; }
                    else if(y >= game.getPanel().getPlayer2().getY()+60 && y < game.getPanel().getPlayer2().getY()+80) {   xa =1; ya=1; }
                    else if(y >= game.getPanel().getPlayer2().getY()+80 && y < game.getPanel().getPlayer2().getY()+100) {   xa =1; ya=2;  }
                    else if(y >= game.getPanel().getPlayer2().getY()+100 && y <= game.getPanel().getPlayer2().getY()+120) {   xa =1; ya=3;  }  
              
              
              
                }
          
            }}
 
Zuletzt bearbeitet von einem Moderator:
W

White_Fox

Hm...ich sehe aus deinem Code leider zu wenig, wie du die Bewegung des Balls genau machst.

Aber allgemein: Fasse die Bewegungsrichtung als Vektor auf. Dann sind Winkelberechnungen kein Problem. Double brauchst du nicht unbedingt dafür, das geht auch mit Integern. Rechne/denke einfach z.B. in ganzen Millimetern oder Mikrometern anstatt in Metern.
 
L

LimDul

Der Trick ist, die Koordinaten mit denen du rechnest, genauer zu machen als die Koordinaten mit denen du zeichnest. Ob mit Integer oder Double ist egal - zum zeichen wird halt gerundet.

Das heißt ein Pixel entspricht in deiner Rechnung z.B. 100 Einheiten. Die Koordinate (200,500) wird dann an (2,5) gezeichnet. Und (330, 720) an (3,7). Dadurch kannst du in der Rechnung mit genaueren Werten arbeiten.
 
Thema: 

Winkelberechnungen auf 2D Grafik

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben