|
Amigos jogadores e desenvolvedores indie!
No artigo passado, vimos rapidamente como carregar um modelo 3D em um programa XNA. Naquela publicação, nós configuramos duas matrizes necessárias para visualizar um modelo 3D: a matriz de Projeção (que indica como a câmera projeta os modelos 3D na tela) e a matriz de Visão (que efetivamente posiciona a câmera no mundo 3D). Neste artigo, veremos como movimentar nosso modelo pela tela.
Para movimentar o modelo que carregamos, vamos precisar configurar a matriz de Mundo – que indica como posicioná-lo dentro da cena 3D (o “mundo” do objeto).
Para isso, primeiramente crie uma matriz identidade de nome “mundo” no início da classe Game1:
Matrix mundo = Matrix.Identity;
Esta matriz será usada no desenho do objeto, bastando incluir no método Draw da classe Game1:
foreach (ModelMesh mesh in modeloNave.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
effect.World = mundo;
mesh.Draw();
}
Lembrando: “modeloNave” foi criado na coluna do mês passado, para carregar um modelo de nave espacial do jogo “Space Wars”.
Para movimentar a nave, tudo o que precisamos fazer é incluir métodos de translação e rotação no método Update. Por exemplo:
KeyboardState teclado = Keyboard.GetState(); // As setas para a esquerda e direita movem a nave no eixo X if (teclado.IsKeyDown(Keys.Left)) mundo *= Matrix.CreateTranslation(new Vector3(-50f, 0f, 0f)); if (teclado.IsKeyDown(Keys.Right)) mundo *= Matrix.CreateTranslation(new Vector3(50f, 0f, 0f)); // Roda nos eixos X e Y if (teclado.IsKeyDown(Keys.X)) mundo *= Matrix.CreateRotationX(0.05f); if (teclado.IsKeyDown(Keys.Y)) mundo *= Matrix.CreateRotationY(0.05f);
Rodando o programa agora, é possível “controlar” a nave usando as teclas X, Y e as setas para direita e esquerda. Para exercitar, sugiro que vocês experimentem outras operações (mover a nave para cima e para baixo e para frente e para trás, por exemplo...) com o teclado e com o gamepad do XBox 360 – que pode ser ligado em qualquer PC, e utilizado com um código do tipo:
GamePadState gamepad = GamePad.GetState(PlayerIndex.One); mundo *= Matrix.CreateTranslation(new Vector3(50f*gamepad.ThumbSticks.Left.Y, 0f, 0f));
Confira aqui o código completo da aplicação! Happy coding!










