2017-04-07 3 views
0

Hallo Ich versuche, ein Pong-Spiel mit Java zu machen und alles funktioniert gut außer Kollisionsteil. Ich habe zuerst die Bounds-Klasse und die Schnittpunktmethode verwendet, um dieses Kollisionsproblem zu lösen, aber diese Methode funktioniert nur für den Kollisionsfall, der auf dem Bild gezeigt wird, das ich gezeichnet habe.Java Pong Kollisionserkennung

error case

Also schrieb ich neuen Code selbst, anstatt die Bounds-Klasse zu verwenden, und ich erfolgreich Verfahren für die Seitenkollisionserkennung erstellt, aber ich habe wieder harte Zeit Kollisionserkennung für die oberen und unteren Rand des Paddels zu lösen .

public boolean collideRight(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

und dies ist die Methode, die ich für die obere und untere Kollisionserkennung gemacht habe.

public boolean collideRightUpSide(Ball ball){ 
    if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

Kann mir bitte jemand helfen.

+3

ich meine wirklich nicht unhöflich sein, aber man sollte auf Spiel-Physik/Kollision Grundlagen nachlesen. Dieses Zeug ist komplex und es gibt mehrere Ansätze. – domsson

+0

Also sollte ich einfach Spielphysik/Kollisionsgrundlagen auf Google eingeben? Übrigens vielen Dank für den Rat, den ich wirklich schätze. Dies ist meine erste Frage zum Stackoverflow und die Leute sind super unterstützend, als ich erwartet hatte. Danke :) –

Antwort

0

Versuchen sowohl die if-Anweisungen in einer Funktion umfassen, die etwa wie folgt aussieht:

public boolean collideFunction(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 
+0

Ich habe gerade versucht, Ihren Rat, und wenn ich Side Detection-Code zu machen, zuerst wenn Anweisung und dann oben und unten Erkennungscode als nächstes sein, wenn, nur die erste if-Anweisung ordnungsgemäß funktioniert, die Side Detection-Code ist. Daher, wenn ich die Reihenfolge von ihnen ändere, funktioniert dieses Mal nur der obere und untere Erkennungscode. Vielen Dank für den Rat aber :) –

+0

Vielleicht können Sie versuchen und fügen beide Bedingungen in einer if-Anweisung implementieren, etwas wie folgt: 'public boolean kollidierenFunktion (Ball Ball) { boolean rechts = ball.getLayoutX() + Ball. getRadius()> = player.getLayoutX() .....; boolean Seiten = (ball.getLayoutX() + ball.getRadius()> = player.getLayoutX() ....; if (rechts | Seiten) { return true;} else { return false ; } } ' – mbhargav294