|
Numa partida de golfe, um jogador bate na bola, inicialmente parada, colocando-a na em alguma área do campo, próximo ou distânte do buraco. O lançamento oblíquo estuda o movimento de corpos, lançados com velocidade inicial vo da superfície da Terra. 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_CinematEscalar010.html
A trajetória é parabólica, como você pode notar na figura acima. Como a análise deste movimento não é fácil, é conveniente aplicarmos o princípio da simultaneidade de Galileu. Veremos que ao projetarmos o corpo simultaneamente no eixo x e y teremos dois movimentos:
- Em relação a vertical, a projeção da bola executa um movimento de aceleração constante e de módulo igual ag. Trata-se de um (M.U.V.) (lançamento vertical)
- Em relação a horizontal, a projeção da bola executa um (M.U.).
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, 560.0f);
// Configura o valor da gravidade
// O valor da gravidade em jogos é um valor que fique
// aparentemente bom dentro do seu jogo
gravidade = 700.0f;
// Configura a velocidade inicial em X e Y
velocidade = new Vector2(320.0f, -800.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 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 de 600.0f pixels/segundos
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, 560) com um velocidade constante horizontal de 320.0f pix/s. No eixo Y a bola sofre a ação da aceleração gravitacional retardando sua velocidade inicial de -800.0 pix/s fazendo com que em algum momento zere sua velocidade e comece uma queda livre.
Resultado
Após compilar (F5) seu código sem erro, você vai obter o seguinte resultado.
Download
Para fazer download do código criado neste tutorial, clique no ícone de download abaixo.













