Hi,
ich habe mit Hilfe eines Tut ein Ping Pong Game programmiert. Bzw. Ich habe mit nur das erst Kapitel angeschaut wie man ein Ball bewegt, den Rest überflogen und alles alleine gemacht.
Ein Fehler ist mir jedoch aufgefallen:
Als ich das dann bei mir übernahm, sackte mein Ball immer zur Hälfte ein.
Ich zeichnete also eine Linie, um mir die wahre x-Koordinate auszugeben und das Ergebnis war folgeder:
Der Ball wurde als als Quadrat angesehen und links oben begann die x-Koordinate. Nach dieser Kenntniss konnte ich dann den Ball richtig abprallen lassen.
Nun, bin ich bei einem anderen Tutorial, aber von derselben Seite und da schreibt der Autor folgendes zu einem Problem, wo es darum geht, wie ein Ball bemerkt, dass er von einem Mauszeiger abgeschossen wurde:
Ein Vektor hat 2 Punkte und ein Punkt hat eine x-Koordinate und eine y-Koordinate. Also ist der angebliche Schussvektor nur ein Punkt, genauso wie der Positionsvektor des Balles.
Die beiden Punkte können nun einen Vektor ergeben. Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden. Sein Erfolg ist also nur ein Zufallsprodukt mit Ungenauigkeiten, was auch das beweisst, dass er als Differenz 15 und nicht 10 nahm. Ausserdem spricht er wieder von Radius, aber wie oben schon bewiesen (siehe Screenshot) ist der x-Wert nicht der radius, sondern der Durchmesser.
Habe ich nun Recht oder irre ich mich fatal?!
Quelle
Liebe Grüße
Reality
ich habe mit Hilfe eines Tut ein Ping Pong Game programmiert. Bzw. Ich habe mit nur das erst Kapitel angeschaut wie man ein Ball bewegt, den Rest überflogen und alles alleine gemacht.
Ein Fehler ist mir jedoch aufgefallen:
...
Vielleicht fragt ihr euch nun, warum ich den Radius mit einbeziehe. Die x - Koordinate des Balles ist seine Mitte, also ist die rechte bzw. linke Koordinate um den Radius des Balles größer bzw. kleiner.
...
Als ich das dann bei mir übernahm, sackte mein Ball immer zur Hälfte ein.
Ich zeichnete also eine Linie, um mir die wahre x-Koordinate auszugeben und das Ergebnis war folgeder:
Der Ball wurde als als Quadrat angesehen und links oben begann die x-Koordinate. Nach dieser Kenntniss konnte ich dann den Ball richtig abprallen lassen.
Nun, bin ich bei einem anderen Tutorial, aber von derselben Seite und da schreibt der Autor folgendes zu einem Problem, wo es darum geht, wie ein Ball bemerkt, dass er von einem Mauszeiger abgeschossen wurde:
Nun denn, die dritte Idee: Aus der Schule dürfte den meisten noch der Begriff eines Vektors geläufig sein. Wir haben es hier nun zwei Vektoren zu tun, die bei einem Schuss entstehen: Einem Schussvektor (x_maus, y_maus) des Mausklicks und einem Positionsvektor des Balles (x_ball, y_ball). Wenn wir nun die Länge des Verbindungsvektors dieser beiden Vektoren bestimmen und dieser kleiner als der Radius des Balles ist, so haben wir den Ball getroffen.
Zunächst berechnen wir also den Verbindungsvektor indem wir die Koordinaten des einen Vektors von denen des Anderen abziehen:
// Bestimmen des Verbindungsvektors
double x = maus_x - pos_x;
double y = maus_y - pos_y;
Nun können wir mit Hilfe des Skalarproduktes bzw. Pythagoras (c = Wurzel aus a² + b²) die Länge dieses Verbindungsvektors bestimmen:
// Berechnen der Distanz
double distance = Math.sqrt ((x*x) + (y*y));
Als letzten Schritt testen wir, ob die Länge dieses Vektors kleiner ist als ein gewisser Betrag, bis zu dem wir den Ball noch als getroffen ansehen. Ich habe für diese Zahl 15 gewählt obwohl der Ball nur einen Radius von 10 hat. Aber nachdem ich einige Werte getestet habe, erschien mir dieser Wert als der am besten taugliche.
// Wenn Distanz kleiner als 15 gilt Ball als getroffen
if (distance < 15)
{
player.addScore (20);
return true;
}
else return false;
Ein Vektor hat 2 Punkte und ein Punkt hat eine x-Koordinate und eine y-Koordinate. Also ist der angebliche Schussvektor nur ein Punkt, genauso wie der Positionsvektor des Balles.
Die beiden Punkte können nun einen Vektor ergeben. Aber mit einem Vektor kann man nicht den Satz des Pythagoras anwenden. Sein Erfolg ist also nur ein Zufallsprodukt mit Ungenauigkeiten, was auch das beweisst, dass er als Differenz 15 und nicht 10 nahm. Ausserdem spricht er wieder von Radius, aber wie oben schon bewiesen (siehe Screenshot) ist der x-Wert nicht der radius, sondern der Durchmesser.
Habe ich nun Recht oder irre ich mich fatal?!
Quelle
Liebe Grüße
Reality