curso (2010) - desenvolvimento de jogos 2d com xna
TRANSCRIPT
Desenvolvimento de Jogos 2D com XNA
Kleber de Oliveira Andrade
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
• O XNA é um framework gratuito e robusto cominterface amigável desenvolvido pela Microsoft paracriar jogos tanto para PC quanto para o console XBox360.
– XNA 3.1 (lançada em 03/07/2009)
• Ao concluir o download do XNA 3.1 é hora deinstalar. Após possuir o XNA instalado em seucomputado, chega a hora de ver se tudo estáfuncionando corretamente.
2010 © Kleber de Oliveira Andrade 44
• 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
[email protected]://kleberandrade.wordpress.com