Ponto V!

Home Matemática e Física Lançamento Vertical (XNA)
Kléber de Oliveira Andrade
Lançamento Vertical (XNA)Imprimir
Escrito por Kleber Andrade

Vejamos agora o movimento de um corpo lançado verticalmente para cima, com uma velocidade inicial vo. Desprezando a resistência do ar, observamos que, à medida que ele sobe, sua velocidade vai diminuindo uniformemente até tornar-se nula, instante em que tem início a sua queda livre. O código deste tutorial foi criado e testado no XNA 4.0, ou seja, qualquer mudança de versão pode acarretar ou não em reajustes no código.

Durante a subida, o movimento é uniformemente retardado, pois o vetor velocidade e o vetor aceleração possuem sentidos contrários; durante a descida, o movimento é uniformemente acelerado (queda livre).

Um modo prático para testarmos esse movimento é utilizar o mesmo programa de queda livre, porém iremos colocar uma velocidade inicial contrária a aceleração da gravidade, veja como fica nosso exemplo.

Exemplo no XNA

O exemplo mostra a gravidade atuando sobre um objeto. A gravidade foi definida como 400 pix/s² e a velocidade inicial como 440 pix/s em Y e zero em X. No método Update é feito uma atualização na posição Y do objeto e na velocidade Y do mesmo. A última operação da rotina garante que a velocidade não será maior que 300 pix/s, simulando assim o equilíbrio entre a gravidade e o atrito que o corpo sofreria.

1º passo: Crie um novo projeto (Windows Game) e crie variáveis para armazenar a posição, velocidade, gravidade e textura do objeto.

//  Informações da bola
Texture2D imagem;
Vector2 posicao;
Vector2 velocidade;
// Informação do ambiente (gravidade = g)
float gravidade;

2º passo: Inicialize a posição do objeto e defina a sua velocidade inicial e a aceleração da gravidade do seu ambiente que será constante, tudo isso dentro do método Initialize()

protected override void Initialize()
{
      // Inicializa a posição da bola
      posicao= new Vector2(360.0f, 500.0f);
      // Configura o valor da gravidade
      gravidade= 400.0f;
      // Configura a velocidade inicial em X e Y
      velocidade = new Vector2(0.0f, -440.0f);
      base.Initialize();
}

3º passo: Copie a textura abaixo ou outra imagem de sua preferência para você carregar e aplicar a queda livre

protected override void LoadContent()
{
     // Create a new SpriteBatch, which can be used to draw textures.
     spriteBatch = new SpriteBatch(GraphicsDevice);
     // Carrega a textura da bola
     imagem = Content.Load(@"ball");
}

4º passo: Vamos desenhar a imagem na tela

protected override void Draw(GameTime gameTime)
{
     GraphicsDevice.Clear(Color.CornflowerBlue);
     spriteBatch.Begin();
     // Desenha a bola
     spriteBatch.Draw(imagem, posicao, Color.White);
     spriteBatch.End();
     base.Draw(gameTime);
}

5º passo: Para concluir vamos aplicar a fórmula descrita no nosso objeto

protected override void Update(GameTime gameTime)
{
      // Tempo passado desde a ultima atualização
      float tempo = (float)(gameTime.ElapsedGameTime.TotalMilliseconds / 1000.0f);
      // Atualiza a posição Y da bola
      posicao += velocidade * tempo;
      // Se não atingiu a velocidade máxima, sua gravidade (h = vo * t + (g * t*t)/2)
      posicao.Y += (velocidade.Y * tempo) + (gravidade* (float)Math.Pow(tempo, 2)) / 2.0f;
      // Atualiza a velocidade Y do objeto ( v = vo + g * t )
      velocidade.Y += gravidade * tempo;
      // A velocidade máxima é 300.0f
      velocidade.Y = (velocidade.Y > 300.0f) ? 300.0f : velocidade.Y;
      base.Update(gameTime);
}

Com esta rotina é chamada a cada laço do jogo, o que será exibido na tela é um objeto (bola) que inicia seu lançamento vertical com -440 pix/s (lembrando que o sinal de negativo é por causa do sistema de coordenadas utilizado nos jogos) contra uma aceleração de gravidade de 300 pix/s². Quando a bola chega a velocidade zero, ela começa uma queda livre e pára de acelerar quando atinge a velocidade de 300 pix/s.

Resultado

Após compilar (F5) seu código sem erro é para você obter o seguinte resultado.

Download

Para fazer download do código criado neste tutorial, clique no ícone de download abaixo.

image


Comentários (3)
  • Anônimo  - ótima explicação
    avatar

    Olá Kleber. O exemplo foi muito bom, meus parabéns! e obrigado.

Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter