2015-09-23 1 views
0

Donc j'essaie de faire un jeu simple et j'ai besoin de la balle pour rebondir sur la pagaie. En ce moment, j'ai la balle qui rebondit bien autour de la fenêtre mais elle passe à travers la pagaie et j'ai de la difficulté à la faire rebondir sur la pagaie de manière réaliste. C'est le code que j'ai qui fait rebondir la balle hors des murs et il fonctionne parfaitement:(Java) Balle rebondir de manière réaliste

//advance the ball 
      ball.advance(); 
      //check if ball should bounce off canvas sides 
      if(ball.getCenterX()+ ball.getRadius() > canvas.getWidth()) ball.setDirectionX(LEFT); 
      if(ball.getCenterX() - ball.getRadius() <0) ball.setDirectionX(RIGHT); 

      if(ball.getCenterY()+ ball.getRadius() > canvas.getHeight()) ball.setDirectionY(UPWARDS); 
      if(ball.getCenterY() - ball.getRadius() < 0) ball.setDirectionY(DOWNWARDS); 

Le problème est que je ne sais pas si je les modifier si des déclarations ou ajouter plus et je ne suis pas sûr comment faire rebondir la balle correctement. J'essayé d'ajouter quelques déclarations et si le meilleur que je suis arrivé était: GIF of game Les déclarations que j'ai ajouté étaient:

if(ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY()) ball.setDirectionY(UPWARDS); if(ball.getCenterY()+ ball.getRadius() < paddle.getTopLeftX()) ball.setDirectionY(DOWNWARDS);

Merci pour toute aide que vous pourriez donner :)

+1

envisager de fournir [exemple runnable] (https: // stackoverflow .com/help/mcve) qui montre votre problème. Ce n'est pas un vidage de code, mais un exemple de ce que vous faites qui met en évidence le problème que vous rencontrez. Cela entraînera moins de confusion et de meilleures réponses – MadProgrammer

+0

Je pense que j'ai trop de code pour faire un court exemple exécutable/Je ne sais pas vraiment comment parce que j'utilise un couple de classes. Je pourrais poster des parties spécifiques si cela peut vous aider à m'aider. Le problème est que je n'arrive pas à comprendre comment configurer les instructions if pour que la balle rebondisse sur la raquette et monte ou touche le fond si elle rate la raquette. Avec juste le premier morceau de code que j'ai posté, il ressemble à ceci: https://gyazo.com/7b51794a6e5e474b508cf442ddebc8dc La balle rebondit autour de la fenêtre trouver mais va à travers la pagaie et im essayant de comprendre chaud pour le faire rebondir . – user3390522

Répondre

0

Je crois que vous avez besoin du balle à rebondir lorsque les coordonnées X et Y atteignent la palette.

À l'heure actuelle, vous utilisez simplement ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY(), donc peu importe si la balle est proche de la pagaie dans l'axe X.

Essayez avec quelque chose comme ceci.

(vous devrez peut-être régler le < et > selon que les valeurs de X augmentation ou une diminution en passant de gauche à droite)

boolean bounceInY = ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY(); 
boolean bounceInX = (ball.getCenterX()+ ball.getRadius() > paddle.getTopLeftX()) && (ball.getCenterX()+ ball.getRadius() < paddle.getTopLeftX() + paddle.getWidth()); 
if (bounceInY && bounceInX) ball.setDirectionY(UPWARDS); 
+0

Il ne semble pas faire quoi que ce soit lorsque ce code est ajouté (j'ai joué avec le < and > aussi). Ça continue tout de même à travers paddle: https://gyazo.com/d1b30c91e6485e9d24c85d1682fd50a3 Cependant, ce que j'ai essayé est d'ajouter cette ligne: if (ball.getCenterY() + ball.getRadius()> paddle.getTopLeftY() && ball.getCenterY() + ball.getRadius() user3390522

+0

De votre code, il semble que vous utilisiez "paddle.getTopLeftX() + paddle.getWidth()" au lieu d'avoir un "paddle.getTopRightX()". Je modifie ma réponse pour utiliser cette même structure. Peut-être que ça fonctionne de cette façon .. – eugenioy

+0

Ok il commence à rebondir de la pagaie maintenant avec votre code: https://gyazo.com/0ad8c31942a308d7ba39e001b419b66e mais c'est un peu glitchy car dans la boule semble rebondir sous la pagaie parfois et du haut parfois. Aussi, quand il manque, il ne semble plus atteindre le bas de la fenêtre, il rebondit avant qu'il n'atteigne le fond. – user3390522