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;
4

1 回答 1

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)。除非您希望桨和球在屏幕上相交,否则您可能需要稍微调整此公式。

于 2012-07-01T00:10:07.590 回答