|
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. 













