/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } ScreenWidth = GraphicsDevice.Viewport.Width; ScreenHeight = GraphicsDevice.Viewport.Height; ball.Move(ball.Velocity); Vector2 player1Velocity = Input.GetKeyboardInputDirection(PlayerIndex.One) * KEYBOARD_PADDLE_SPEED; Vector2 player2Velocity = Input.GetKeyboardInputDirection(PlayerIndex.Two) * KEYBOARD_PADDLE_SPEED; player1.Move(player1Velocity); player2.Move(player2Velocity); if (ball.Position.X + ball.Texture.Width < 0) { ball.Launch(BALL_START_SPEED); } if (ball.Position.X > ScreenWidth) { ball.Launch(BALL_START_SPEED); } if (GameObject.CheckPaddleBallCollision(player1, ball)) { ball.Velocity.X = Math.Abs(ball.Velocity.X); } if (GameObject.CheckPaddleBallCollision(player2, ball)) { ball.Velocity.X = -Math.Abs(ball.Velocity.X); } base.Update(gameTime); }