Как я могу применить силу тяжести к моему приложению прыгающего шара?

Я написал довольно простое Java-приложение, которое позволяет вам перетаскивать мышь, и в зависимости от длины перетаскивания мыши, оно будет стрелять мячом в этом направлении, отскакивая от стен по ходу движения.

Вот быстрый скриншот:
альтернативный текст http://img222.imageshack.us/img222/3179/ballbouncemf9.png

Каждый из кругов на экране является объектом Ball. Движение шаров разбивается на вектора x и 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
    }
}

Это прекрасно работает. Все шары отскакивают от стены к стене.

Однако я решил, что хочу иметь возможность включать эффекты гравитации. Я знаю, что объекты ускоряются к Земле со скоростью 9,8 м / с, но я не знаю, как это должно переводиться в код. Я понимаю, что на yVector это повлияет, но мои эксперименты не дали желаемого эффекта.

В идеале,Я хотел бы иметь возможность добавить некоторый гравитационный эффект в эту программу, а также позволить шарам несколько раз подпрыгивать, прежде чем осесть на «землю».

Как я могу создать этот эффект упругости и гравитации? Как я должен манипулировать векторами скорости мяча на каждом шаге? Что нужно сделать, когда он достигнет «земли», чтобы я мог позволить ему снова подпрыгнуть, но несколько короче, чем в прошлый раз?

Любая помощь приветствуется в правильном направлении.

Спасибо всем за комментарии! Это уже работает отлично!

В моем шаге () я добавляю гравитационную постоянную в мой yVector, как предлагали люди, и это мой 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.
}

Тем не менее, шары будут продолжать скользить / кататься по полу. Я предполагаю, что это потому, что я просто беру процент (90%) их векторов за каждый отскок, и он никогда не бывает действительно нулевым. Должен ли я добавить в проверку, что если xVector становится определенным абсолютным значением, я должен просто изменить его на ноль?

Ответы на вопрос(9)

Ваш ответ на вопрос