2015-09-23 4 views
0

Так что я пытаюсь сделать простую игру, и мне нужен мяч, чтобы отскакивать от весла. Прямо сейчас у меня есть мяч, прыгающий по окну, но он проходит через весло, и у меня возникают проблемы с его реалистичным отскоком от весла. Это код, у меня есть, что делает отскок мяча от стен, и это работает прекрасно:(Java) Мяч отскакивает от весла реалистичным способом

//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); 

Проблема в том, что я не уверен, что если заявления должны изменить эти или добавить больше, и я не уверен, как заставить мяч правильно отскакивать от весла. Я попытался добавить пару если заявления и лучший, что я получил это: GIF of game Заявления, которые я добавил было:

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

Спасибо за любую помощь вы могли бы дать :)

+1

Рассматривают обеспечение [работоспособный пример] (https: // StackOverflow .com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

+0

Я думаю, что у меня слишком много кода, чтобы сделать короткий исполняемый пример/я действительно не знаю, потому что я использую пару классов. Я мог бы опубликовать конкретные детали, если это поможет вам помочь мне. Проблема в том, что я не могу понять, как настроить инструкции if, чтобы мяч отскакивал от весла и поднимался или ударялся о нижнюю, если он пропустил весло. С первым куском кода, который я разместил, он выглядит так: https://gyazo.com/7b51794a6e5e474b508cf442ddebc8dc. Мяч отскакивает вокруг окна, но идет прямо через весло, и я пытаюсь разобраться в нем, чтобы заставить его подпрыгнуть , – user3390522

ответ

0

Я считаю, что вам нужно мяч для отскока, когда и X и Y координаты достигают весла.

Прямо сейчас, вы используете только ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY(), поэтому не имеет значения, находится ли шар рядом с веслом в оси X.

Попробуйте что-нибудь в этом роде.

(возможно, потребуется настроить < и > в зависимости от того, являются ли значения для X увеличения или уменьшения при движении слева направо)

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

Он ничего не делает, когда этот код добавлен (я тоже испортил < and >). Все еще идет прямо через paddle: https://gyazo.com/d1b30c91e6485e9d24c85d1682fd50a3 Однако я попытался добавить эту строку: if (ball.getCenterY() + ball.getRadius()> paddle.getTopLeftY() && ball.getCenterY() + ball.getRadius() user3390522

+0

Из вашего кода кажется, что вы используете «paddle.getTopLeftX() + paddle.getWidth()» вместо «paddle.getTopRightX()». Я изменяю свой ответ на использование той же структуры. Возможно, это работает именно так. – eugenioy

+0

Хорошо, теперь он начинает отскакивать от весла с вашего кода: https://gyazo.com/0ad8c31942a308d7ba39e001b419b66e, но он немного глючит, поскольку в шаре, кажется, отскакивает из-под весла иногда и сверху. Кроме того, когда он промахивается, он, похоже, не достигает нижней части окна, он отскакивает, прежде чем он опустится на дно. – user3390522

Смежные вопросы