Firstly, if given a vertical velocity upwards(a minus value), the ball just rapidly gains momentum and disappears out of the screen. This shouldn't be allowed according to the lines:

if (position.Y < MinY) //Move the ball out of collisionposition.Y = MinY;

Secondly, when given a minus horizontal velocity the ball bounces to the left hand side of the screen but gets stuck there and bounces on the x axis until coming to rest.

Finally, whenever the ball is given a horizontal velocity and describes an arc the ball graphic is very jittery back and forth.

public void Update(GameTime gameTime, GraphicsDeviceManager graphics) { if (Keyboard.GetState().IsKeyDown(Keys.Space)) { released = true; initialVel = 0f; // set a velocity of 0 pixels per second } if (released == true) { //Calls the method to animate the sprite; SpriteSheetAnim(gameTime, graphics); if (initialVelHoriz > 0) { if (position.X > MaxX) { //Move the ball out of collision position.X = MaxX; //Multiply the velocity by the coefficient of resitution of the bouncing ball initialVelHoriz = initialVelHoriz*horizRestitution; } //velocity equation (s = ut + 1/2at^2) for HORIZONTAL component //since there is no acceleration, the second half of the equation is left out position.X += initialVelHoriz * (timer / 1000); } else if (initialVelHoriz < 0) { if (position.X < MinX) { //Move the ball out of collision position.X = 0; //Multiply the velocity by the coefficient of resitution of the bouncing ball initialVelHoriz = initialVelHoriz * horizRestitution; } //velocity equation (s = ut + 1/2at^2) for HORIZONTAL component //since there is no acceleration, the second half of the equation is left out position.X += initialVelHoriz * (timer / 1000); } if (initialVel >= 0) { if (position.Y > MaxY) { //Move the ball out of collision position.Y = MaxY; //Multiply the velocity by the coefficient of resitution of the bouncing ball finalVel = finalVel*restitution; //Everytime ball hits ground the horizontal speed will be reduced due to friction initialVelHoriz *= 0.9f; if (finalVel > 0) { //using velocity equation with negative factor on gravity because of going in opposite direction //finalVel will decrease in value //velocity equation (v = u + at) for VERTICAL component finalVel -= initialVel + (-accelDueToGrav*(timer/1000)); position.Y -= finalVel; } } else { //velocity equation (v = u + at) for VERTICAL component finalVel += initialVel + (accelDueToGrav * (timer / 1000)); position.Y += finalVel; } } if(initialVel < 0) { if (position.Y < MinY) { //Move the ball out of collision position.Y = MinY; //Multiply the velocity by the coefficient of resitution of the bouncing ball finalVel = finalVel * restitution; //Everytime ball hits the roof the horizontal speed will be reduced due to friction initialVelHoriz *= 0.9f; if (finalVel > 0) { //using velocity equation with negative factor on gravity because of going in opposite direction //finalVel will decrease in value //velocity equation (v = u + at) for VERTICAL component finalVel += initialVel + (accelDueToGrav * (timer / 1000)); position.Y += finalVel; } } else { //velocity equation (v = u + at) for VERTICAL component //Gravity will be in the opposing direction so is given a negative value finalVel += initialVel + (-(accelDueToGrav)*(timer/1000)); position.Y += finalVel; } } } }