2012-06-30 9 views
0

내 목표는 공의 반지름 값이 게임의 차후 버전에서 변경 되더라도 공을 패들 중앙에 놓는 것입니다. 내 유일한 문제는 게임 공의 x 좌표에 맞는 수학 공식 을 구현하는 것입니다. 나는 완벽하게 작동하는 y 좌표 공식을 얻었다.브레이크 아웃 (게임 프로젝트) - 노를 센터링하기 위해 공을 얻는 것 --Java

정답이 필요하지 않습니다. 답변을 얻으려면 지침과 제안이 필요합니다. "// 트러블 수학을내는"

http://i33.photobucket.com/albums/d86/warnexus/ball.png

당신은 코멘트를 아래의 코드를 찾을 수 있습니다 여기에

는 자바 프로그램의 사진입니다.

/** Radius of the ball in pixels */ 
private static final int BALL_RADIUS = 500; 


private void setup_Paddle() 
{ 
    // TODO Auto-generated method stub 

    // x coordinate of the upper left corner 
    // y coordinate of the upper left corner 

    paddle = new GRect(20,20,PADDLE_WIDTH,PADDLE_HEIGHT); 
    paddle.setFilled(true); 
    paddle.setColor(Color.PINK); 
    add(paddle,paddleInitialLocationX,paddleInitialLocationY); 

} 

private void setup_Ball() 
{ 

    // Trouble figuring the math here 
    int ballSetUpCoordX = (int) (paddle.getX()); 
    // Good Code! 
    int ballSetUpCoordY = (int) (paddle.getY()-BALL_RADIUS); 

    gameBall = new GOval(BALL_RADIUS,BALL_RADIUS); 
    gameBall.setFilled(true); 
    gameBall.setColor(Color.BLUE); 

    add(gameBall,ballSetUpCoordX,ballSetUpCoordY); 
} 

    private GOval gameBall; 
    private GRect paddle; 
    private int paddleInitialLocationX = 200; 
    private int paddleInitialLocationY = 500; 

답변

2

좌표는 일반적으로 객체의 왼쪽 상단 모서리입니다. 따라서 두 개의 객체 o1o2을 같은 위치에 배치하려면 크기에 따라 오프셋해야합니다.

여기서 o1의 중심을 o2의 중심으로 옮깁니다.

int o2CenterX = o2.x - (o2.width/2); 
//If we just used o2CenterX, it would put the corner of o1 into the center of o2 
o1.x = o2CenterX - (o1.width/2); 

y에 대해 반복하십시오 (이미 반경이 너비/2로 사용됨). 외륜과 공이 화면에서 교차하지 않는 한이 공식을 약간 조정해야 할 것입니다.

+0

나는 당신이 말한 것을 시도했다. 그러나 잘못 코딩하지 않으면 올바르게 보이지 않는다. \t int center = (int) (paddle.getX() - (PADDLE_WIDTH/2)); \t \t int ballSetUpCoordX = (int) (center - (PADDLE_WIDTH)/2); – Nicholas

+0

여전히 좋은 제안이지만 의견을 투표 할 것이지만 4 명이 더 필요합니다. – Nicholas

+0

두 번째 줄이 잘못되었습니다. 볼 너비만큼 오프셋되어야합니다. – Thomas