Tja da has du leider genau das wichtigste vergessen. Aber egal.
Da wo das steht was du vergessen hast musst du so was ähnliches schreiben wie den code den ich dir Kommentiert habe.
Ist das der ganze code von deinem ball?
eigentlich müsste in der act methode noch eine if anweisung sein die prüft ob du den Schläger (das braune Rechteck unten) getroffen hast.
Sollte etwa so aussehen:
if (canSee(Schläger.class)) { // statt schläger den klassennamen den du verwendest.
ychange=-ychange;
}
an den Seiten Einfallswinkel gleich ausfallswinkel und am schläger noch etwas umgerechnet mit der position des Balles relativ zur position des Schlägers
Der Code den ich oben Kommentier hab ist aus meinem Pong Spiel. Un der Code is öffentlich.
Zur Frage wohin:
In deiner Klasse Ball (oder wie auch immer du den Felsen da nennst) muss irgentwo stehen was passiert wenn der Ball auf den Schläger unten trifft. Und da fügst du dann ein was ich dir gestern geschickt hab nur halt auf deinen Code umgestimmt (also andere werte oder so).
Ich könnte dir aber bestimmt besser helfen wenn du mir mal den code zeigst.
Ok aber den Teil mit dem X-Koordinaten subtrahieren has du doch noch verstanden oder?
Ich erklär dir mal den part vom code von meinem Szenario der hierfür wichtig ist:
int dif = Schlaeger.getYPos()-getY(); // hier berechne ich die relative position des balles.
int turn = (int) ((-1.5*getRotation())+450); // das hier ist ne mathematische funktion. (typ f(x) = m*x+b), du kannst aber auch deine Funktion mit Einfallswinkel = Ausfallswinkel als grundlage nemen.
//hier beginnt dann die if anweisung die ich bereits erwähnt habe.
if (dif < 125 && dif > -125) {// wenn die differenz (relative position) zwichen -125 und 125 liegt wurde der Schläger getroffen (bei deinem Schläger sind es andere werte da der nicht die selbe größe hat.)
//hier unterteile ich den Schläger nun in verschiedene Abteile.
if (dif >= -125 && dif <= -100) {//in diesem Abteil wird die rotation des Balles um 50 % erhöht
turn += turn*0.5;
}
else if (dif >= -100 && dif <= -75) {//hier sinds nur noch 40%
turn += turn*0.4;
}
else if (dif >= -75 && dif <= -50) {//30%
turn += turn*0.3;
}
else if (dif >= -50 && dif <= -25) {// den Rest kannst du dir warscheinlich denken
turn += turn*0.2;
}
else if (dif >= -25 && dif <= 0) {
turn += turn*0.1;
}
else if (dif >= 0 && dif <= 25) {
turn -= turn*0.1;
}
else if (dif >= 25 && dif <= 50) {
turn -= turn*0.2;
}
else if (dif >= 50 && dif <= 75) {
turn -= turn*0.3;
}
else if (dif >= 75 && dif <= 100) {
turn -= turn*0.4;
}
else if (dif >= 100 && dif <= 125) {
turn -= turn*0.5;
}
//hier schließe ich dann nur noch aus das der Winkel > 245 oder < 280 ist damit der Ball nicht ewig an der oberen und unteren Wand hin und her titscht.
turn(turn);
while (getRotation() > 245 && getRotation() < 280) {
turn(5);
}
while (getRotation() > 70 && getRotation() < 105) {
turn(5);
}
//und hier stelle ich sicher das der Ball nicht zweimal geschlagen wird, indem ich ihn von dem Schläger entferne.
for (int i = 0; getX() <= 100 && i < 25; i++) {
stepp();
}
}
So ich hoffe ich konnte dir helfen.
Das Szenario könnte dir helfen:
http://www.greenfoot.org/scenarios/5847
oder einfach:
mit der X-Koordinate des Balls minus der X-Koordinate der Schlägers kriegst du die relative position. Un den Winkel veränders du dann indem du diesen Wert in ner If anweisung einbaust (aber auch unter berücksichtigung von Einfallswinkel = Ausfallswinkel).
2012/9/14
Pong
2012/9/14
Breakout
2012/9/14
Pong
2012/9/14
Breakout
2012/9/14
Pong
2012/9/13
Breakout
2012/9/12
Breakout
2012/9/12
Breakout
2012/9/12
Breakout