Como aplico gravidade à minha aplicação de bola quicando?

Eu escrevi um aplicativo java bastante simples que permite arrastar o mouse e, com base no comprimento do mouse, ele dispara uma bola nessa direção, ricocheteando nas paredes à medida que avança.

Aqui está uma captura de tela rápida:
texto alternativo http://img222.imageshack.us/img222/3179/ballbouncemf9.png

Cada um dos círculos na tela é um objeto Bola. O movimento das bolas é dividido em um vetor xey;

public class Ball {
    public int xPos;
    public int yPos;
    public int xVector;
    public int yVector;

    public Ball(int xPos, int yPos, int xVector, int yVector) {
        this.xPos = xPos;
        this.yPos = yPos;
        this.xVector = xVector;
        this.yVector = yVector;
    }

    public void step()
    {
        posX += xVector;
        posY += yVector;

        checkCollisions();
    }

    public void checkCollisions()
    {
        // Check if we have collided with a wall
        // If we have, take the negative of the appropriate vector
        // Depending on which wall you hit
    }

    public void draw()
    {
        // draw our circle at it's position
    }
}

Isso funciona muito bem. Todas as bolas saltam e giram de parede a parede.

No entanto, decidi que quero poder incluir os efeitos da gravidade. Eu sei que os objetos aceleram em direção à Terra a 9,8m / s, mas não sei diretamente como isso deve se traduzir em código. Sei que o yVector será afetado, mas minha experiência com isso não teve o efeito desejado que eu queria.

Idealmente,Eu gostaria de poder adicionar algum efeito gravitacional a este programa e também permitir que as bolas saltassem algumas vezes antes de se estabelecerem no "solo".

Como posso criar esse efeito de gravidade elástico-saltitante? Como devo manipular os vetores de velocidade da bola em cada etapa? O que deve ser feito quando atinge o "solo" para que eu possa saltar novamente, mas um pouco mais curto que o tempo anterior?

Qualquer ajuda é apreciada em me apontar na direção certa.

Obrigado pelos comentários a todos! Já está funcionando muito bem!

No meu passo (), estou adicionando uma constante de gravidade ao meu yVector como as pessoas sugeriram e este é o meu checkCollision ():

public void checkCollision()
{
    if (posX - radius < 0)              // Left Wall?
    {
        posX = radius;              // Place ball against edge
        xVector = -(xVector * friction);
    }
    else if (posX + radius > rightBound) // Right Wall?
    {
        posX = rightBound - radius;     // Place ball against edge
        xVector = -(xVector * friction);
    }

    // Same for posY and yVector here.
}

No entanto, as bolas continuarão a deslizar / rolar no chão. Suponho que isso ocorre porque estou simplesmente obtendo uma porcentagem (90%) de seus vetores a cada salto e nunca é realmente zero. Devo acrescentar que, se o xVector se tornar um determinado valor absoluto, devo alterá-lo para zero?

questionAnswers(9)

yourAnswerToTheQuestion