Comment appliquer la gravité à ma demande de balle rebondissante?

J'ai écrit un assez simple application java qui vous permet de glisser votre souris et en fonction de la durée de la souris, faites glisser que vous avez fait, il va tirer une balle dans cette direction, en rebondissant sur les murs, comme il va.

Voici une petite capture d'écran:
le texte d'alt http://img222.imageshack.us/img222/3179/ballbouncemf9.png

Chacun des cercles sur l'écran est une Boule d'objet. Les boules mouvement est décomposé en x et y du vecteur;

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

Cela fonctionne très bien. Toutes les balles rebondissent autour de et autour de mur à mur.

Cependant, j'ai décidé que je voulais être en mesure d'inclure les effets de la gravité. Je sais que les objets d'accélérer vers la terre à 9,8 m/s, mais je n'ai pas directement savoir comment cela devrait se traduire par code. Je me rends compte que la yVector sera affectée, mais mon expérimentation avec les ce n'ont pas l'effet désiré que je voulais.

Idéalement, je voudrais être en mesure d'ajouter un peu de la gravité de ce programme et permettent aussi que les balles rebondissent à quelques reprises avant de s'installer à la "terre".

Comment puis-je créer ce rebondissement élastique, de la gravité? Comment dois-je manipuler les vecteurs de vitesse de la balle à chaque étape? Ce qui doit être fait quand il frappe le "terrain" afin que je puisse lui permettre de rebondir de nouveau, mais un peu plus court que la fois précédente?

Toute aide est très appréciée dans de me pointer dans la bonne direction.


Merci pour les commentaires tout le monde! C'est déjà génial de travailler!

Dans ma démarche() je suis l'ajout d'une gravité constante de mon yVector comme l'ont suggéré, et c'est mon 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.
}

Cependant, les boules vont continuer à le faire glisser autour de la/rouler sur le sol. Je suppose que c'est parce que je suis tout simplement en prenant un pourcentage (90%) de leurs vecteurs chaque rebond et il n'est jamais vraiment zéro. Dois-je ajouter dans une case que si le xVector devient d'une certaine valeur absolue que je devrais juste changer à zéro?

source d'informationauteur