Sie sind auf Seite 1von 46

XNA

Introduo ao XNA

Introduo

XNA Game Studio 3.1 (http://creators.xna.com/) Visual Studio 2008

Introduo

File New Project

Introduo

Solution Explorer

Introduo

Estrutura geral de um jogo

Existncia de uma rotina que roda em loop, mantendo o jogo sendo executado mesmo sem a interao do usurio
Inicializao grfica, controles de input e som Carga dos recursos do jogo Inicio do Loop do jogo. Em cada um dos passos: a. Colocar o input do usurio b. Realizar clculos necessrios (IA, movimentos, deteco de colises, etc.) c. Teste de encerramento se encontrado para o loop d. Renderizao da tela, gerao de sons e resposta aos controle Finalizao do controle grfico, dispositivos de entrada, e som Liberao de recursos

1. 2. 3.

4. 5.

Introduo

Sem uso o XNA toda a parte pesada da infra-estrutura de um jogo tem que ser implementada O XNA atua encapsulando boa parte dessa complexidade Quando se cria um projeto XNA, criado um objeto da classe Microsoft.Xna.Framework.Game

Introduo

Principais mtodos:

Game1() Inicializao geral(Game1.cs) Initialize() Inicializao do Jogo (Game1.cs) LoadContent() Carga dos recursos do jogo(Game1.cs) Run() Inicio o Loop do jogos (Program.cs). Em cada iterao: Update() Leitura do input do usurio, clculos e etc.(Game1.cs) Draw() Cdigo de renderizao(Game1.cs) UnloadContent() Liberao de recursos (Game1.cs)

Introduo

Inicializao do Jogo

A classe Game1 inicia-se definindo e criando os objetos que sero referncias ao controle grfico (device) e ao objeto de desenho 2D (SpriteBatch) O construtor da classe tambm configura o diretrio raiz da aplicao, local a partir do qual sero encontrados os recursos do jogo (imagens, sons e etc)

Introduo

Content Pipeline

Simplifica o processo de utilizao de recursos (carga, armazenamento e etc)

Introduo

Content Pipeline

Ao se incluir um contedo ao jogo, utiliza-se um dos importadores disponveis no XNA Normalizando os dados e colocando-os em um formato que seja fcil de ser lido. Suportando:

Arquivos em formato 3D padro DirectX e o formato FBX da Autodesk Arquivos FX de formato de materiais para renderizao em 3D Arquivos de formato 2D: BMP, DDS, JPG, PNG, e TGA Fonts Arquivos XML Audio: XAP (arquivo da ferramenta XACT), WAV, WMA, e MP3

Introduo

Content Pipeline

Uma vez importados os contedos os processadores iro atuar disponibilizando as informaes em objetos acessveis pelo jogo. O gerenciador de contedo (content manager) responsvel pela leitura desses objetos possvel a criao de novos importers e processadores de contedos.

Introduo

Inicializao do jogo

O mtodo Initialize() chamada apenas uma nica vez antes do inicio do loop do jogo Esse mtodo deve ser utilizado para a inicializao de rotinas no grficas, como por exemplo, a preparao do contedo de udio do jogo. O mtodo tambm chame o mtodo Initialize da classe base (pai) chamando os respectivos inicializadores de cada componente Os grficos so carregados em um mtodo separado LoadContent. Possibilitando a re-carga dos grficos caso alguma propriedade grfica seja alterada.

Introduo

Finalizao do jogo

Por utilizar a tecnologia .NET a finalizao da aplicao simplificada pela atuao do Garbage Collector Para a codificao de rotina de liberao de recursos prprios deve ser utilizado o mtodo UnloadContent

Introduo

Game Loop

A maioria do processamento do jogo ocorre dentro do loop O XNA prover dois mtodos que sejam chamados dentro do loop:

Update aonde dever ser includa boa parte da lgica do jogo Draw responsvel pela renderizao dos componentes grficos do jogo.

Introduo

Game Loop

O principal parmetro o gameTime Atravs desse parmetro possvel saber quanto tempo se passou desde do ltimo passo da loop do jogo. Propriedades:

ElapsedGameTime informa o tempo de jogo desde da ltima chamada ao loop do jogo. O loop do jogo chamada em uma quantidade fixa de vezes por segundo. Utiliza-se o tempo do jogo (ao invs do tempo real) para simplificar. Se a propriedade IsFixedTimeStep configurada para True ento o mtodo Update chamado em uma quantidade fixa de vezes por segundos. ElapsedRealTime informa o tempo real desde da ltima chamada ao loop do jogo. Se a propriedade IsFixedTimeStep configurada para False, o loop ser chamada na mxima velocidade, quantas vezes forem possveis por segundo (aumenta a complexidade do jogo mas melhora o tempo de resposta).

Introduo

Game Loop

Propriedades do GameTime

TotalGameTime e TotalRealTime Total de tempo passado desde o inicio do jogo, medido em tempo de jogo (unidades fixas por segundo) ou tempo real (segundos) IsRunningSlowly indicativo de que o jogo est chamada o mtodo Update em quantidade menor do que configurado em Game.TargetElapsedTime.

Introduo

Game Loop

A classe GamePad referencia o controlador do jogo, sendo possvel por exemplo ativar a vibrao. Esta classe no utiliza buffer para o input do usurio, assim, a informao obtida em tempo real.

O mtodo Draw apresenta um cdigo para limpeza da tela e o preenchimento com uma cor especfica.

Grficos 2D

Termos comuns

Sprite imagens em 2D que podem ser manipuladas de forma independente do resto da cena do jogo. Este termo pode descrever tanto uma imagem quanto uma classe utilizada para representar a imagem (contendo propriedades: velocidade, altura...) Texturas refere-se a imagens 2D carregada em um modelo 3D, na qual pode ser vista em qualquer ponto de vista. Billboard textura mapeada para um plano perpendicular do eixo da cmera (http://creators.xna.com/en-US/sample/billboard) Background imagem de fundo de uma cena. Se o background apresenta movimento temos um scrolling background

Grficos 2D

Sistemas de coordenadas

Sistema de coordenadas padro

Sistema de coordenadas de tela (screen)

Grficos 2D

Exibindo um Sprite

Grficos 2D

Adicionando um contedo

Grfico 2D

Visualizando as propriedades do contedo

Grficos 2D

Exibindo o Sprite

Pode-se utilizar o mtodo Draw da classe Game atravs do Spritebatch Criar um mtodo Draw na classe clsSprite

Grficos 2D

Exibindo o Sprite

Deve-se incluir a definio da classe clsSprite no inicio da classe game:

Grficos 2D

Carregando o Sprite

Grficos 2D

Liberando recursos

Grficos 2D

Desenhando o Sprite

Grficos 2D

Grficos 2D

Alterando o tamanho da janela

Grficos 2D

Movendo um sprite

A utilizao de coordenadas de tela facilita o processo de deslocamento de um objeto. Incrementando a coordenada X o sprite move para direita, decrementando a coordenada X o sprite move para esquerda Aumentando a coordenada Y o sprite move para baixo, diminuindo a coordenada Y o sprite move para cima. Deve-se alterar a posio de um sprite no evento Draw da classe games.

Grficos 2D

Movimentando um sprite

Alterando a classe sprite para conter uma nova propriedade velocity (controlar a velocidade em X e Y)

Grficos 2D

Movimentando um sprite

Alterando o construtor da classe para receber a largura e altura da tela

Grficos 2D

Movimento um sprite

Alterando a chamada do construtor da classe sprite

Grficos 2D

Movimento um sprite

Alterando a carga do sprite para indicar a velocidade inicial de sendo 1 pixel em cada coordenada

Grficos 2D

Movimento um sprite

Criar um mtodo de controle de movimento na classe sprite

Grficos 2D

Movimento um sprite

Alterando o mtodo Draw para gerar o movimento

Coliso

Existem vrios algoritmos para deteco de coliso de dois sprites O teste de coliso no realizado analisando todos os pixels dos objetos envolvidos Realiza-se uma simplificao da forma do objeto para facilitar os clculos

Coliso

Uma forma simples de se detectar coliso checar as coordenadas x,y do canto superior da primeira caixa est dentro da caixa que contm o segundo elemento.

Coliso

Coliso

Inserindo o segundo sprite e verificando a coliso

Coliso

Quando se testa coliso entre circulos (objetos com geometria circular), verifica-se se a distncia entre os centros menor que a soma dos dois raios

Raio

Raio

Coliso

Criando duas propriedades do sprite:

Coliso

Cdigo para detectar a coliso dos circulos

Game Input

Game Input

Usando o teclado para alterar o posicionamento do sprite

Game Input

Usando o mouse

Das könnte Ihnen auch gefallen