¿Cómo aplico la gravedad a mi aplicación de pelota que rebota?

He escrito una aplicación Java bastante simple que te permite arrastrar el mouse y, según la longitud del arrastre del mouse que hiciste, disparará una pelota en esa dirección, rebotando en las paredes a medida que avanza.

Aquí hay una captura de pantalla rápida:
texto alternativo http://img222.imageshack.us/img222/3179/ballbouncemf9.png

Cada uno de los círculos en la pantalla es un objeto Ball. El movimiento de las bolas se divide en un vector x e y;

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
    }
}

Esto funciona muy bien. Todas las bolas rebotan de una pared a otra.

Sin embargo, he decidido que quiero poder incluir los efectos de la gravedad. Sé que los objetos aceleran hacia la Tierra a 9.8 m / s, pero no sé directamente cómo se debería traducir esto en código. Me doy cuenta de que el yVector se verá afectado, pero mi experimentación con esto no tuvo el efecto deseado que quería.

Idealmente,Me gustaría poder agregar algún efecto de gravedad a este programa y también permitir que las bolas reboten algunas veces antes de asentarse en el "suelo".

¿Cómo puedo crear este efecto de gravedad elástico que rebota? ¿Cómo debo manipular los vectores de velocidad de la pelota en cada paso? ¿Qué se debe hacer cuando toca el "suelo" para que pueda volver a saltar, pero algo más corto que la vez anterior?

Cualquier ayuda es apreciada al señalarme en la dirección correcta.

Gracias por los comentarios a todos! ¡Ya está funcionando genial!

En mi paso () estoy agregando una constante de gravedad a mi yVector como la gente sugirió y este es mi 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.
}

Sin embargo, las bolas continuarán deslizándose / rodando en el piso. Supongo que esto se debe a que simplemente estoy tomando un porcentaje (90%) de sus vectores cada rebote y nunca es realmente cero. ¿Debo agregar en un cheque que si el xVector se convierte en un cierto valor absoluto, debería cambiarlo a cero?

Respuestas a la pregunta(9)

Su respuesta a la pregunta