bDando continuidade ao post sobre manipulacao de elementos 2D, neste serao apresentadas maneiras para movimentacao de sprites na tela, leitura de comandos do usuario atraves do teclado e verificacao de colisao de objetos.Movimentacao do Sprite na telaPara movimentarmos nosso sprite pela tela, criaremos um metodo na classe que o representa chamado Mover e tambem adicionaremos um atributo chamado velocidade a esta classe, este atributo determinara quantos pontos o sprite deve se mover nas posicoes X e Y quando o metodo Mover for chamado, e ainda um atributo para representar o tamanho da tela, chamado tamanhoDaTela que sera usado pra verificar se o sprite alcancou uma das bordas da tela. Alteraremos o construtor de nossa classe para configurar o atributo velocidade, tamanhoDaTela e tambem o atributo tamanho que sera definido pela largura e altura da imagem de nosso sprite. O Metodo mover ira somar a posicao atual do sprite com a velocidade definida o que causara o movimento.Apos as alteracoes nossa classe ficara da seguinte maneira:class Ball{ private Texture2D textura; private Vector2 tamanho; private Vector2 posicao; private Vector2 velocidade; private Vector2 tamanhoDaTela; public Texture2D Textura { get { return textura; } set { textura = value; } } public Vector2 Tamanho { get { return tamanho; } set { tamanho = value; } } public Vector2 Posicao { get { return posicao; } set { posicao = value; } } public Vector2 Velocidade { get { return velocidade; } set { velocidade = value; } } public Vector2 TamanhoDaTela { get { return tamanhoDaTela; } set { tamanhoDaTela = value; } } public Ball(Texture2D textura, Vector2 posicao, Vector2 velocidade, Vector2 tamanhoDaTela) { Textura = textura; Posicao = posicao; Velocidade = velocidade; // Configurando o tamanho de acordo com as medidas da imagem do sprite tamanho = new Vector2(Textura.Width, Textura.Height); TamanhoDaTela = tamanhoDaTela; } public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(textura, posicao, Color.White); } public void Mover() { posicao += velocidade; }} Na classe Game1, alteraremos o metodo LoadContent para adequa-lo ao novo construtor de nosso sprite. Usamos a referencia graphics para obter o tamanho de nossa tela:protected override void LoadContent(){ spriteBatch = new SpriteBatch(GraphicsDevice); // Carregando nosso sprite // Enviamos a imagem, posicao, velocidade e tamanho da tela para o sprite ball = new Ball(Content.Load("ball"), new Vector2(0, 0), new Vector2(2, 2), new Vector2(graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight));}E adicionamos uma chamada para o metodo Mover do sprite, no metodo Update da classe Game1:protected override void Update(GameTime gameTime){ if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO ball.Mover(); base.Update(gameTime);}Feitas as alteracoes podemos executar o projeto e veremos nosso sprite se movendo pela tela, porem percebemos que o sprite nao para ao alcancar as bordas da tela, simplesmente some. Vamos melhorar esta movimentacao de modo com que ao alcancar uma das bordas o sprite inverta sua movimentacao, causando a impressao de colisao com a borda.Para isso vamos alterar o metodo Mover da classe de nosso sprite, fazendo com este verifique se alcancou uma das bordas e caso o tenha feito inverta sua direcao de movimento.public void Mover(){ // Verificando se alcancou a borda esquerda if (posicao.X + velocidade.X < 0) { velocidade.X