Ponto V!

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

Quando lançamos um corpo (por exemplo, uma bola de futebol), horizontalmente, de um ponto situado a uma altura h, a cima do solo, ele descreve um arco de parábola até atingir o solo. De acordo com a figura, observamos que, durante o movimento do corpo, a velocidade horizontal de lançamento permanece constante (MRU); mas, à medida que o corpo cai, o corpo vai adquirindo uma velocidade vertical cada vez maior (MRUV). Na vertical o corpo encontra-se em queda livre , mas na , horizontal o movimento é uniforme. 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.

Fonte da imagem: http://www.ciencia-cultura.com/Pagina_Fis/vestibular00/vestibular_CinematEscalar009.html

Assim, um método prático de se estudar esse movimento é decompondo-o em dois movimentos que ocorrem simultaneamente.

  • O movimento horizontal, que é um MRU, com velocidade constante, em que [ S = v * t ]
  • O movimento vertical, que é um MRUA com aas mesmas equações já vistas (queda livre), ou seja, [ h = (g * t * t) / 2 ]

Fonte da image: http://www.ciencia-cultura.com/Pagina_Fis/vestibular00/vestibular_CinematEscalar009.html

Exemplo no XNA:

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(0.0f, 0.0f);
      // Configura o valor da gravidade
      gravidade = 700.0f;
      // Configura a velocidade inicial em X e Y
      velocidade = new Vector2(100.0f, 0.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<Texture2D>(@"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 o movimento em X da bola
      posicao.X += velocidade.X * tempo;
      // Ataualiza a posição Y da bola
      // S = So * 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;
      // Verfifica se atingiu a velocidade máxima é 600.0f
      velocidade.Y = (velocidade.Y > 600.0f) ? 600.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 no ponto (0, 0) com um velocidade constante horizontal de 100.0f pix/s. No eixo Y a bola sofre a ação da aceleração gravitacional aumentando sua velociadade (queda livre).

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 (8)
  • Dailson
    avatar

    Olá Kleber!

    Sou iniciante na área de games e estou seguindo seu tutorial acima. Porém o erro fica no (@"ball";);
    Aparece uma msg dizendo: "File not found". O que devo fazer?

  • Anônimo
    avatar

    Você copiou a textura da bola e colocou ela dentro do XNA?

  • Dailson
    avatar

    Sim. Fiz tudo o que diz no tutorial. Mas não encontra a imagem.

  • Anônimo
    avatar

    Se não encontra a imagem é porque ela não foi inserida no local correto ou esta com outro nome.

    Já tentou baixar o código do tutorial e rodar?

  • Dailson
    avatar

    Pela código fornecido consegui, mas comparando com o meu está igual. Só mudam algumas linhas creio eu que não afeta onde estava dando o erro... Por exemplo:

    graphics.PreferredBackBufferWidth = 800;
    graphics.PreferredBackBufferHeight = 600;
    Window.Title = "Tutorial de Lançamento Horizontal no Vacuo - http://www.pontov.com.br";


    ;)
    Aproveitando a ocasião. Obrigado pela ajuda e parabéns pelo trabalho.

  • Kleber Andrade
    avatar

    A imagem esta com o mesmo nome e no mesmo caminho?

    Obrigado!

  • Dailson
    avatar

    Consegui Kleber, obrigado. Agora tô procurando uma forma de fazer minha sprite se movimentar de acordo com as teclas, que pelo visto encontrei em seu site.

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