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!
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: