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

Post on 07-Feb-2019

215 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

XNA

Introdução ao XNA

Introdução

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

Visual Studio 2008

Introdução

File → New Project

Introdução

Solution Explorer

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

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

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)

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)

Introdução

Content Pipeline

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

armazenamento e etc)

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

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.

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.

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

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.

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

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.

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.

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

Gráficos 2D

Sistemas de coordenadas

Sistema de coordenadas

padrão

Sistema de coordenadas

de tela (screen)

Gráficos 2D

Exibindo um Sprite

Gráficos 2D

Adicionando um conteúdo

Gráfico 2D

Visualizando as propriedades do conteúdo

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

Gráficos 2D

Exibindo o Sprite

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

classe game:

Gráficos 2D

Carregando o Sprite

Gráficos 2D

Liberando recursos

Gráficos 2D

Desenhando o Sprite

Gráficos 2D

Gráficos 2D

Alterando o tamanho da janela

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.

Gráficos 2D

Movimentando um sprite

Alterando a classe sprite para conter uma nova propriedade

velocity (controlar a velocidade em X e Y)

Gráficos 2D

Movimentando um sprite

Alterando o construtor da classe para receber a largura e altura

da tela

Gráficos 2D

Movimento um sprite

Alterando a chamada do construtor da classe sprite

Gráficos 2D

Movimento um sprite

Alterando a carga do sprite para indicar a velocidade inicial de

sendo 1 pixel em cada coordenada

Gráficos 2D

Movimento um sprite

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

Gráficos 2D

Movimento um sprite

Alterando o método Draw para gerar o movimento

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

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.

Colisão

Colisão

Inserindo o segundo sprite e verificando a colisão

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

Colisão

Criando duas propriedades do sprite:

Colisão

Código para detectar a colisão dos circulos

Game Input

Game Input

Usando o teclado para alterar o posicionamento do sprite

Game Input

Usando o mouse

top related