introdução ao xna · referências ao controle gráfico (device) e ao objeto de desenho 2d ......

46
XNA Introdução ao XNA

Upload: trannhan

Post on 07-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

XNA

Introdução ao XNA

Page 2: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

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

Visual Studio 2008

Page 3: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

File → New Project

Page 4: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Solution Explorer

Page 5: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Estrutura geral de um jogo

Existência de uma rotina que roda em loop, mantendo o jogo

sendo executado mesmo sem a interação do usuário

1. Inicialização gráfica, controles de input e som

2. Carga dos recursos do jogo

3. Inicio do Loop do jogo. Em cada um dos passos:

a. Colocar o input do usuário

b. Realizar cálculos necessários (IA, movimentos, detecção de colisões, etc.)

c. Teste de encerramento – se encontrado para o loop

d. Renderização da tela, geração de sons e resposta aos controle

4. Finalização do controle gráfico, dispositivos de entrada, e som

5. Liberação de recursos

Page 6: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

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

Page 7: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Principais métodos:

Game1() – Inicialização geral(Game1.cs)

Initialize() – Inicialização do Jogo (Game1.cs)

LoadContent() – Carga dos recursos do jogo(Game1.cs)

Run() – Inicio o Loop do jogos (Program.cs). Em cada iteração:

Update() – Leitura do input do usuário, cálculos e etc.(Game1.cs)

Draw() – Código de renderização(Game1.cs)

UnloadContent() – Liberação de recursos (Game1.cs)

Page 8: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Inicialização do Jogo

A classe Game1 inicia-se definindo e criando os objetos que serão

referências ao controle gráfico (device) e ao objeto de desenho 2D

(SpriteBatch)

O construtor da classe também configura o diretório raiz da aplicação,

local a partir do qual serão encontrados os recursos do jogo (imagens,

sons e etc)

Page 9: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Content Pipeline

Simplifica o processo de utilização de recursos (carga,

armazenamento e etc)

Page 10: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Content Pipeline

Ao se incluir um conteúdo ao jogo, utiliza-se um dos

importadores disponíveis no XNA

Normalizando os dados e colocando-os em um formato que seja

fácil de ser lido. Suportando:

Arquivos em formato 3D padrão DirectX e o formato FBX da

Autodesk

Arquivos FX de formato de materiais para renderização 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

Page 11: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Content Pipeline

Uma vez importados os conteúdos os processadores irão atuar

disponibilizando as informações em objetos acessíveis pelo

jogo.

O gerenciador de conteúdo (content manager) é responsável

pela leitura desses objetos

É possível a criação de novos importers e processadores de

conteúdos.

Page 12: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Inicialização do jogo

O método Initialize() é chamada apenas uma única vez antes do

inicio do loop do jogo

Esse método deve ser utilizado para a inicialização de rotinas

não gráficas, como por exemplo, a preparação do conteúdo de

áudio do jogo.

O método também chame o método Initialize da classe base

(pai) chamando os respectivos inicializadores de cada

componente

Os gráficos são carregados em um método separado

LoadContent. Possibilitando a re-carga dos gráficos caso

alguma propriedade gráfica seja alterada.

Page 13: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Finalização do jogo

Por utilizar a tecnologia .NET a finalização da aplicação é

simplificada pela atuação do Garbage Collector

Para a codificação de rotina de liberação de recursos próprios

deve ser utilizado o método UnloadContent

Page 14: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Game Loop

A maioria do processamento do jogo ocorre dentro do loop

O XNA prover dois métodos que sejam chamados dentro do loop:

Update – aonde deverá ser incluída boa parte da lógica do jogo

Draw – responsável pela renderização dos componentes gráficos do jogo.

Page 15: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Game Loop

O principal parâmetro é o gameTime

Através desse parâmetro é possível 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 invés do tempo real) para simplificar. Se a propriedade IsFixedTimeStep é configurada para Trueentão o método 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 máxima velocidade, quantas vezes forem possíveis por segundo (aumenta a complexidade do jogo mas melhora o tempo de resposta).

Page 16: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

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 método

Update em quantidade menor do que configurado em

Game.TargetElapsedTime.

Page 17: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Introdução

Game Loop

A classe GamePad referencia o controlador do jogo, sendo

possível por exemplo ativar a vibração.

Esta classe não utiliza buffer para o input do usuário, assim, a

informação obtida é em tempo real.

O método Draw apresenta um código para limpeza da tela e o

preenchimento com uma cor específica.

Page 18: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 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 câmera (http://creators.xna.com/en-US/sample/billboard)

Background – imagem de fundo de uma cena. Se o background

apresenta movimento temos um scrolling background

Page 19: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Sistemas de coordenadas

Sistema de coordenadas

padrão

Sistema de coordenadas

de tela (screen)

Page 20: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Exibindo um Sprite

Page 21: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Adicionando um conteúdo

Page 22: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráfico 2D

Visualizando as propriedades do conteúdo

Page 23: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Exibindo o Sprite

Pode-se utilizar o método Draw da classe Game através do

Spritebatch

Criar um método Draw na classe clsSprite

Page 24: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Exibindo o Sprite

Deve-se incluir a definição da classe clsSprite no inicio da

classe game:

Page 25: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Carregando o Sprite

Page 26: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Liberando recursos

Page 27: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Desenhando o Sprite

Page 28: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Page 29: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Alterando o tamanho da janela

Page 30: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movendo um sprite

A utilização 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 posição de um sprite no evento Draw da

classe games.

Page 31: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimentando um sprite

Alterando a classe sprite para conter uma nova propriedade

velocity (controlar a velocidade em X e Y)

Page 32: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimentando um sprite

Alterando o construtor da classe para receber a largura e altura

da tela

Page 33: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimento um sprite

Alterando a chamada do construtor da classe sprite

Page 34: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimento um sprite

Alterando a carga do sprite para indicar a velocidade inicial de

sendo 1 pixel em cada coordenada

Page 35: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimento um sprite

Criar um método de controle de movimento na classe sprite

Page 36: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Gráficos 2D

Movimento um sprite

Alterando o método Draw para gerar o movimento

Page 37: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Existem vários algoritmos para detecção de colisão de

dois sprites

O teste de colisão não é realizado analisando todos os

pixels dos objetos envolvidos

Realiza-se uma simplificação da forma do objeto para

facilitar os cálculos

Page 38: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Uma forma simples de se detectar colisão é checar as

coordenadas x,y do canto superior da primeira caixa está

dentro da caixa que contém o segundo elemento.

Page 39: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Page 40: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Inserindo o segundo sprite e verificando a colisão

Page 41: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Quando se testa colisão entre circulos (objetos com

geometria circular), verifica-se se a distância entre os

centros é menor que a soma dos dois raios

Raio Raio

Page 42: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Criando duas propriedades do sprite:

Page 43: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Colisão

Código para detectar a colisão dos circulos

Page 44: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Game Input

Page 45: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Game Input

Usando o teclado para alterar o posicionamento do sprite

Page 46: Introdução ao XNA · referências ao controle gráfico (device) e ao objeto de desenho 2D ... Esse método deve ser utilizado para a inicialização de rotinas não gráficas, como

Game Input

Usando o mouse