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

座標は通常、オブジェクトの左上隅です。したがって、任意の 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 に答える