나는 원형 모양의 패들이 원형 경계 안에 있어야하는 공을 굴절시키는 Pong-360 게임을 가지고 있습니다. 공이 경계선에 올랐을 때 패들과 마주 치지 않으면 경계선을 벗어나지 않고 선수가 마지막으로 공 점수를 치게됩니다. 내가 가지고있는 문제는 외륜에 충격을 가하면 올바른 방향으로 공을 돌려 보내는 것입니다. 공이 패들의 특정 절반에 닿으면 그 방향으로 튀어 나와야하지만, 경계의 반대쪽으로 다시 돌아 가야합니다. 바로 지금 나는 경계를 16 개의 슬라이스로 나누고 충격을받은 슬라이스에 따라 범위 내에서 임의의 각도로 무작위로 각도를 지정하여 튀어 오름을 얻었습니다. 내 수학이 정확하지 않기 때문에 이것은 의도 한대로 작동하지 않습니다. 그러나 어떤 식 으로든 다시해야합니다. 공이 어디를 가든 상관없이 경계의 반대쪽 반으로 공을 되돌릴 수있는 각도를 얻는 방법을 알 수는 없습니다. 나는 공의 이동 방향, 경계 내의 현재 위치, 접촉을 한 외륜의 위치와 같은 변수로부터 각도를 얻으려는 시도를 여러 번했지만, 지금까지 나는 실패를 경험했다.원 안에 공이 튀어 오름
public void bounce(){
boolean changeAngle = false;
if(bluePaddle.intersects(ball.getX(), ball.getY(), ball.getDiameter(), ball.getDiameter())){
lastHit = 1;
changeAngle = true;
}
else if(redPaddle.intersects(ball.getX(), ball.getY(), ball.getDiameter(), ball.getDiameter())){
lastHit = 2;
changeAngle = true;
}
if (changeAngle){
// Right side of boundary
if (ball.getX() > center_x) {
// Quadrant 4
if (ball.getY() > center_y){
// Slice 13
if (ball.getY() - center_y > Math.sin(3 * Math.PI/8)){
angle = (double) (randNum.nextInt(90) + 90);
}
// Code for other slices omitted
}//end Quadrant 4
// Code for other quadrants omitted
}//end right side of boundary
// Code for Left side of boundary omitted
ball.setDx((int) (speed * Math.cos(Math.toRadians(angle))));
ball.setDy((int) (speed * Math.sin(Math.toRadians(angle))));
}//end if (changeAngle)
bouncing = false;
}//end bounce method
을 당신이 볼 수 있듯이,이 각도는 단순히 내가 각 슬라이스에 대한 좋은 것이라고 생각 범위 내에서 무작위로 생성되고, 지금처럼 다음과 같이 현재, 공의 방향을 변경하기위한 코드입니다. 강조하기 위해 필자는 주로 수학에 대한 도움이 필요하며 Java로 구현하는 것은 보조입니다. 컴파일 및 실행되는 전체 코드 (모든 .java 및 .class 파일)는 다음에서 찾을 수 있습니다. https://github.com/pideltajah/Pong360/tree/master/Pong360
주 방법은 Pong.java 파일에 있습니다.
도움이 될 것입니다.
이 가능하지 않는 것 같습니다 그린 화살표 : 정규화 된 차이 벡터
희망이 의미
[정정했다 EDIT] 있습니다. 외륜이 가장 오른쪽의 포션에 있으면 그 휨이 자신의 측면에 부딪히게됩니다. 더 나아가 매우 합리적인 방법으로 해결할 수없는 것 같습니다. 예를 들어, 빨간 외륜이 위에있는 경우, 외륜의 오른쪽을 치면 빨간색의 벽에 공을 보냅니다. – dwn
벡터를 벡터에 매핑하여 중심선을 강타 할 수도 있지만 전략에 리바운드를 사용하는 것이 좋습니다 – dwn
또는 원형을 분기로 나눌 수 있으며 각 플레이어는 두 개의 패들을 180도 간격으로 제어 할 수 있습니다 (또는 정사각형의 경우 반대편). 그건 멍청한 생각인데, 제 변명은 늦었습니다. – dwn