curso (2010) - desenvolvimento de jogos 2d com xna

Post on 25-May-2015

1.299 Views

Category:

Entertainment & Humor

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Desenvolvimento de Jogos 2D com XNA

Kleber de Oliveira Andrade

pdjkleber@gmail.com

Universidade de São Paulo – USP

Escola de Engenharia de São Carlos – EESCDepartamento de Dinâmica de Sistemas e Controles

Maio/2010

• Bacharel em Ciência da Computação– Escola de Engenharia de Piracicaba (EEP)

– Título: Um algoritmo evolutivo para adaptação dos NPCs em um jogo de ação.

• Mestrando em Engenharia Mecânica– Escola de Engenharia de São Carlos (USP/EESC)

– Título: Planejadores neurais para manobra de baliza de um automóvel de passeio utilizando sensor laser, ultrassônicos e visão artificial.

• Jogador a mais de 20 anos desde a época do Atari.

2010 © Kleber de Oliveira Andrade 2

• Uma breve Introdução

• A Indústria de Jogos Digitais

• Visão sobre o XNA

• Conhecimentos básicos de XNA

• Revisão de Programação C#

• Criando um Jogo 2D completo

32010 © Kleber de Oliveira Andrade

2010 © Kleber de Oliveira Andrade 4

2010 © Kleber de Oliveira Andrade 5

1958: “Tennis for Two” jogo quefuncionava em um osciloscópio(Willy Higinbotham)

1961: “Space Wars” jogodesenvolvido no computadorPDP-1 por Steve Russel, o jogotinha 2Kb

2010 © Kleber de Oliveira Andrade 6

1979: Asteroids

Donkey Kong (1984)

Wolf 3D (1992)

Década de 70 é considerada uma OdisséiaComercial, muitos jogos foram desenvolvidos.

Depois do Crash da Indústriaem 1983/84, surgiu umarevolução nos jogos

A década de 90,muitos consolesforam lançados e em1992 uma novaevolução com osjogos FPS.

2010 © Kleber de Oliveira Andrade 7

God of War III

X Games SnoCross

Qualidade gráfica evidência aevolução no desenvolvimento dejogos, assim como sua InteligênciaArtificial.

Jogos que envolvem centenas deprofissionais das mais diversasáreas, e altos orçamentos.

• A discussão não se restringe apenas à gráficos ou inteligência artificial.

• O que esperar então ?

– Facilidade de criação ?

– Comunidades ?

– Interface com o jogador ?

– Inovação?

– Prazer de jogar por horas e horas ?

2010 © Kleber de Oliveira Andrade 8

2010 © Kleber de Oliveira Andrade 9

The Harvest 3 Racing Game City Rain

2010 © Kleber de Oliveira Andrade 10

• É uma das mais rentáveis do mundo

– Faturamentos de 2007 supera a indústria de música e cinema juntos.

• Parece coisa de criança, mas não é.

– 75% dos chefes de família jogam

– Média de idade de jogadores: 30 anos

– Média de idade de compradores: 37 anos

2010 © Kleber de Oliveira Andrade 11

Dados da ESA (“2008 video-game indutry facts”), http://www.theesa.com

• Serious Game (Treinamento e Capacitação)

2010 © Kleber de Oliveira Andrade 12

Blossom

BattlezoneEconorte (Oniria)

• Advergames (Propagandas)

2010 © Kleber de Oliveira Andrade 13

1993 - Cool Spot (7-Up)

1990 - Yo! Noid (Domino’s Pizza)

1983 - Pepsi Invaders

Rooftop Racer

• Educacionais (Jogos cujo objetivo é ensinar)

2010 © Kleber de Oliveira Andrade 14

Project Beauty Alice

Big Brain Academy: Wii Degree

• “God” games (Softwares Toys)

2010 © Kleber de Oliveira Andrade 15

Black & White

The Sims

• Criar jogos demanda muito conhecimento técnico.

• Acesso aos Kits de desenvolvimento– Restrito– Caro– Complexo

• Desenvolver para qual plataforma?

• Faltavam comunidades!

• Quais as chances de sucesso para quem esta começando?

2010 © Kleber de Oliveira Andrade 16

2010 © Kleber de Oliveira Andrade 17

Xna Não é um Acrônimo

2010 © Kleber de Oliveira Andrade 18

2010 © Kleber de Oliveira Andrade 19

• Para desenvolver / jogar no PC

– Nenhum!

– Tudo através de ferramentas gratuitas (Visual C# Express Edition, XNA Game Studio e recursos da comunidade).

• Para desenvolver / jogar no Xbox 360.

– Licença XNA Creators Club• US$ 99,00 por ano ou

• US$ 49,00 por 4 meses

2010 © Kleber de Oliveira Andrade 20

• Principal API utilizada pra desenvolvimento de jogo

• Aplicativos desenvolvidos em C++

• Desenvolvimento para Windows

• API construída sobre o DirectX

• Jogos desenvolvidos com linguagens .NET

• Desenvolvimento para plataforma Windows

• API construída utilizando como base o MDX (substituiu o MDX)

• Aplicativos desenvolvidos em C#

• Desenvolvimento para Windows, Xbox 360 e Zune

2010 © Kleber de Oliveira Andrade 21

2010 © Kleber de Oliveira Andrade 22

Jogos

Extended

Framework

Core

Framework

Plataforma

Starter Kits Code Content Components

Application Model Content Pipeline

Graphics Audio Input Math Storage

Direct3D XACT XINPUT XCONTENT

XNA Provê Você cria ComunidadeLegenda:

Network

2010 © Kleber de Oliveira Andrade 23

Jogos

Extended

Framework

Core

Framework

Plataforma

Starter Kits Code Content Components

Application Model Content Pipeline

Direct3D XACT XINPUT XCONTENT

Graphics Audio Input Math Storage Network

Modifique os jogos e crie o seu próprio

2010 © Kleber de Oliveira Andrade 24

2010 © Kleber de Oliveira Andrade 25

Jogos

Extended

Framework

Core

Framework

Plataforma

Starter Kits Code Content Components

Application Model Content Pipeline

Direct3D XACT XINPUT XCONTENT

Graphics Audio Input Math Storage Network

Mantenha-se focado no jogo e não em qual plataforma está rodando

• Faz o serviço chato e trabalhoso para você

• Desenvolvimento acelerado

• Possui recursos avançados

• Extensível

• Game

2010 © Kleber de Oliveira Andrade 26

• Liberdade de escolha

– Ferramentas de criação de conteúdo

– Game engines

• Menos código para a criação

– Mais tempo para a criação do jogo

• Forte integração entre código e conteúdo

– Build de código e de conteúdo unificados

2010 © Kleber de Oliveira Andrade 27

2010 © Kleber de Oliveira Andrade 28

2010 © Kleber de Oliveira Andrade 29

Jogos

Extended

Framework

Core

Framework

Plataforma

Starter Kits Code Content Components

Application Model Content Pipeline

Direct3D XACT XINPUT XCONTENT

Graphics Audio Input Math Storage Network

• Fornece recursos de renderização de baixo nível

• Construído em cima do Direct3D 9

• APIs atualizadas que seguem as regras do .NET– Efeitos– Recursos– Lock / Unlock– Vertex streams

• Recursos fornecidos– Model, Mesh e Bones– Textures– Effects e Shaders

2010 © Kleber de Oliveira Andrade 30

• Baseado no XACT (Cross-Platform Audio CreationTool)– Adiciona sons

– Ajusta propriedades

– Construir bancos de sons

• Fácil integração para desenvolvedores– Acesse-os via seus nomes lógicos

– Looping, streaming, e gerenciamento de memória

– Sem gerenciamento de buffer de baixo nível

2010 © Kleber de Oliveira Andrade 31

• Torna fácil a obtenção de dados de entrada

• Dispositivos– Keyboard

– Mouse (apenas para Windows)

– Xbox 360 (Gamepad, guitarra, tambores, volantes, etc...)

• Modelo de programação imediato– Não demanda inicialização

– Não demanda gerenciamento de estados

– Basicamente tira uma fotografia dos estados de todos os botões

2010 © Kleber de Oliveira Andrade 32

• Fornece um jeito fácil para ler e salvar informações do jogo

• Atua como um sistema de arquivos virtuais– Arquivos armazenados no local correto de cada plataforma

– Suporta múltiplos dispositivos de armazenamento e perfis no Xbox 360

• Baseado em Streams, o que facilita a integração com o System.IO

2010 © Kleber de Oliveira Andrade 33

• Biblioteca de funções matemáticas para jogos– Vector, Matriz, Quaternion, Plane, AABB, Sphere, Ray,

Frustum, Curve

– Regra-da-mão-direita por default

– Fácil integração

– Testes de interesecções

– Facilitadores para movimentos

2010 © Kleber de Oliveira Andrade 34

• Conexão entre Xbox 360 e PC

• Conexão local e via LIVE!

• Inclui suporte a LIVE! MatchMaking– Conecta você a pessoas com perfil semelhantes

• Na versão 3.1– Ranked matchmaking– Venda de jogos na Live Community!– Conexão de até 8 Zunes em rede ad-hoc

2010 © Kleber de Oliveira Andrade 35

2010 © Kleber de Oliveira Andrade 36

Jogos

Extended

Framework

Core

Framework

Plataforma

Starter Kits Code Content Components

Application Model Content Pipeline

Graphics Audio Input Math Storage

Direct3D XACT XINPUT XCONTENT

2010 © Kleber de Oliveira Andrade37

Skinning & Animation

3D Particles

Distortion

Shatter Effects

• AbduX

– Jogo completo, feito em 4 dias, por 1 pessoa

– Explora recursos gráficos, sons, input e fontes no XNA além de reconhecimento de voz

2010 © Kleber de Oliveira Andrade 38

• Dungeon Quest

– Desenvolvido em apenas 4 dias

– Equipe: 1 desenvolvedor e 1 designer

2010 © Kleber de Oliveira Andrade 39

2010 © Kleber de Oliveira Andrade 40

2010 © Kleber de Oliveira Andrade 41

• Para desenvolver:– Windows XP SP2 ou superior

– Visual C# 2008 Expresse Edition ou versão Professional

– Runtime do DirectX

• Para rodar:– Placa de vídeo compatível com DirectX 9.0 e Shaders 2.0

– Runtime do XNA e do DirectX

– PC: Windows XP SP2 ou superior

– Xbox 360: deve haver HD

– Zune: pronto para rodar!

2010 © Kleber de Oliveira Andrade 42

• É uma ferramenta de desenvolvimento (IDE) criada pelaMicrosoft.

• Sua interface é simples e intuitiva.

• Muito recomendada para usuários iniciantes emprogramação na linguagem C#.

• A versão Express não tem custo e você pode registrá-la.

– Visual C# 2008 Express Edition

2010 © Kleber de Oliveira Andrade 43

• File New Project

2010 © Kleber de Oliveira Andrade 45

Solution Explorer

• Após criar seu novo projeto, você já pode testá-lo.

• Para isso, aperte F5.

• Se tudo der certo, espera-se o seguinte resultado.

2010 © Kleber de Oliveira Andrade 46

2010 © Kleber de Oliveira Andrade 47

Initialize() LoadContent() Update()

Draw()UnloadContent()

Game Loop

Término da aplicação

2010 © Kleber de Oliveira Andrade 48

• Pasta Content, botão direito do mouse... Add -> Existing Item

• Criar uma variável do tipo Texture2D Texture2D image;

• Carregar a imagem (método LoadContent)image = Content.Load<Texture2D>(“fantasma”);

• Desenhar a imagem na tela (método Draw)spriteBatch.Begin();spriteBatch.Draw(imagem, new Vector(100.0f, 100.0f), Color.White);spriteBatch.End();

2010 © Kleber de Oliveira Andrade 49

• Espera-se obter o seguinte resultado ao compilar o exemplo.

2010 © Kleber de Oliveira Andrade 50

• Adicione duas novas variáveis.Vector2 position = new Vector2(100.0f, 100.0f);KeyboardState keyState;

• No método Draw, troque new Vector2(100.0f, 100.0f) pela variável position que criamos.

• No método Update, adicione as seguintes linhas

keyState = Keyboard.GetState();

if (keysboardState.IsKeyDown(Keys.Up)) position.Y -= 5.0f; if (keysboardState.IsKeyDown(Keys.Down)) position.Y += 5.0f; if (keysboardState.IsKeyDown(Keys.Left)) position.X -= 5.0f;if (keysboardState.IsKeyDown(Keys.Right)) position.X += 5.0f;

2010 © Kleber de Oliveira Andrade 51

• Comente as linhas do método Update que manipulam a imagem com o teclado.

• Adicione uma variável de estado para o mouseMouseState mState;

• No método Update digite.mState = Mouse.GetState();position.X = mState.X - image.Width / 2;position.Y = mState.Y - image.Height / 2;

• Para fazer a seta aparecer coloque no Initialize.IsMouseVisible = true;

2010 © Kleber de Oliveira Andrade 52

• Add -> New Item

2010 © Kleber de Oliveira Andrade 53

• É gerado um arquivo xml. Mude a seguinte informação dele<FontName>Arial</FontName>

• Crie uma variável do tipo SpriteFontSpriteFont sFont;

• Carregue a font que você criou no método LoadContentsFont = Content.Load<SpriteFont>(“fontArial”);

• Escreva as informações na tela dentro do método Draw, entre os comandos Begin() e End()

spriteBatch.DrawString(sFont, "X = " + position.X.ToString(), newVector2(10.0f, 10.0f), Color.White);

spriteBatch.DrawString(sFont, "Y = " + position.Y.ToString(), newVector2(10.0f, 30.0f), Color.White);

2010 © Kleber de Oliveira Andrade 54

• Espera-se obter o seguinte resultado ao compilar o exemplo.

2010 © Kleber de Oliveira Andrade 55

• Adicione as seguintes linhas após fazer osmovimentos do personagem.

2010 © Kleber de Oliveira Andrade 56

• Adicione a música na pasta Content do seu projeto

Add -> Existent Item

• Declare uma variável do tipo Song

Song music;

• Carregar a música no LoadContent

music = Content.Load<Song>(“music”);

2010 © Kleber de Oliveira Andrade 57

• Para tocar a música digite o seguinte código também no LoadContent

MediaPlayer.Play(music);

• Para fazer a música ficar em loop infinito digite:

MediaPlayer.IsRepeating = true;

2010 © Kleber de Oliveira Andrade 58

• Adicione o efeito sonoro na pasta Content do seu projeto

Add -> Existent Item

• Declare uma variável do tipo SoundEffect

SoundEffect collision;

• Carregar a música no LoadContent

collision = Content.Load<SoundEffect>(“collision”);

2010 © Kleber de Oliveira Andrade 59

• Declare uma váriavel de colisão como booleanabool collsion;

• No método Update, deixe collision sempre comofalso e quando acontecer uma colisão do fantasmacom a parede troque o valor para verdadeiro.

• Então verifica se collision é verdadeiro e toque osom.

if (collision) sound.Play();

2010 © Kleber de Oliveira Andrade 60

2010 © Kleber de Oliveira Andrade 61

Centro C2 Centro C1

Raio r2 Raio r1

Existe colisão se:dist(c1,c2) < r1 + r2

Colisão em X Colisão em Y

Colisão completa

• GameComponent– Automatiza alguma métodos sobrecarregando-os, menos a

parte de desenho

– Exemplo prático

• DrawableGameComponent– Automatiza alguma métodos sobrecarregando-os, inclusive

a parte de desenho

– Exemplo prático

• GameServices– Disponibiliza serviços de objetos para outras classes

– Exemplo prático

2010 © Kleber de Oliveira Andrade 62

2010 © Kleber de Oliveira Andrade 63

• A Linguagem C#:

– É uma linguagem orientada a objeto, moderna, desenhadaa fim de aumentar a produtividade do programador. C# éutilizado por milhares de programadores e analistas eprovê acesso total a tecnologia utilizando o .NetFramework, O Compact Framework e mais recentemente oXNA Framework

2010 © Kleber de Oliveira Andrade 64

• namespace – é usada para declarar um escopo. Este escopo permite você organizar o código e oferece uma maneira parar criar tipos exclusivos.

652010 © Kleber de Oliveira Andrade

• #region e #endregion – directiva para incluir umaregião dentro do código, facilitando a vida doprogramador, podendo este visualizar apenas ocódigo de interesse no momento.

662010 © Kleber de Oliveira Andrade

• Comentários – /* ... */ e //

672010 © Kleber de Oliveira Andrade

• Using – mesmo conceito do #include da linguagem C/C++ ou import da linguagem Java

682010 © Kleber de Oliveira Andrade

com using

sem using

• Variáveis:

692010 © Kleber de Oliveira Andrade

Tipos C# Valores possíveis de se armazenar

bool true ou false (valores booleanos)

byte 0 a 255 (8 bits)

sbyte -128 a 127 (8 bits)

char Um caractere qualquer (16 bits)

decimal ±1.0 x 10-28 a ±7.9 x 1028 (128 bits)

double ±5.0 x 10-324 a ±1.7 x 10308 (64 bits)

float ±1.5 x 10-45 a ±3.4 x 1038 (32 bits)

int -2,147,483,648 a 2,147,483,647 (32 bits)

uint 0 a 4,294,967,295 (32 bits)

long -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (64 bits)

ulong 0 a 18,446,744,073,709,551,615 (64 bits)

object Qualquer tipo

short -32,768 a 32,767 (16 bits)

ushort 0 a 65,535 (16 bits)

string Seqüência de caracteres (16 bits por caractere)

• Operadores

2010 © Kleber de Oliveira Andrade 70

Category Operator(s) Associativity

Primary (x) x.y f(x) a[x] x++ x- - new typeof sizeof checked unchecked Left

Unary + - ! ~ ++x - -x (T)x Left

Multiplicative * / % Left

Additive + - Left

Shift << >> Left

Relational < > <= >= is Left

Equality == != Right

Logical AND & Left

Logical XOR ^ Left

Logical OR | Left

Conditional AND && Left

Conditional OR || Left

Ternary ? : Right

Assignment = *= /= %= += -= <<= >>= &= ^= |= Right

• Vetores Multidimensionais (arrays):

712010 © Kleber de Oliveira Andrade

• Entrada e Saída padrão:

722010 © Kleber de Oliveira Andrade

• Estrutura condicional IF/ELSE:

732010 © Kleber de Oliveira Andrade

• Laço de repetição FOR:

742010 © Kleber de Oliveira Andrade

• Laço de repetição WHILE:

752010 © Kleber de Oliveira Andrade

• Laço de repetição FOREACH:– O laço foreach é usado quando queremos percorrer todos os

elementos de um array (matriz) ou de coleções de dados, tais comouma ArrayList.

762010 © Kleber de Oliveira Andrade

• Listas:

772010 © Kleber de Oliveira Andrade

• Tratamento de erros:

782010 © Kleber de Oliveira Andrade

• Classes

• Construtor

• Atributos e métodos

792010 © Kleber de Oliveira Andrade

• Herança, Polimorfismo, Encapsulamento e Enumeradores.

802010 © Kleber de Oliveira Andrade

2010 © Kleber de Oliveira Andrade 81

2010 © Kleber de Oliveira Andrade 82

• “XNA Tap”

– Construção de um jogo simples

– Construção de um gerenciador de telas

– O jogador deve acertar as baratas com o jornal

2010 © Kleber de Oliveira Andrade 83

• Sharp, John. Microsoft Visual C#: Passo a passo (Tradução: Altair Dias Caldas deMoraes). Porto Alegre : Bookman, 2007. 504 p. ISBN 978-85-60031-17-7.

• Kleber Andrade. Curso de XNA. http://kleberandrade.wordpress.com/xna –[acessado em abril de 2010].

• Sharp Games. http://www.sharpgames.net - [acessado em abril de 2010]

• XNA Developer Center, http://msdn.microsoft.com/xna/ - [acessado em março de2010]

• XNA Creators Club, http://creators.xna.com – [acessado em abril 2010]

2010 © Kleber de Oliveira Andrade 84

Obrigado !Kleber de Oliveira Andrade

pdjkleber@gmail.comhttp://kleberandrade.wordpress.com

top related