2. Introdução ao XNA e ao
XNA Game Developer
José Antonio “jalf” Leal de Farias
Microsoft Most Valuable Professional
Sharpgames Team
jalf@sharpgames.net
http://www.sharpgames.net
3. Agenda
O que é XNA??
XNA Game Studio
XNA Framework
Xbox 360
Xbox Live Community Games
Criando um Jogo
Aprendendo XNA
4. O que é XNA??
XNA's Not Acronymed (não é uma sigla)
Plataforma de desenvolvimento de jogos
com foco no jogo e não na tecnologia
XNA Game Studio
XNA Framework
5. Um pouco de história….
XNA Game Studio Express 1.0 lançado
em12/2006
Foco não profissional ??
XNA Game Studio 2.0 lançado12/2007
XNA Game Studio Professional?
6. XNA Game Studio
XNA Game Studio
Extende o Visual Studio para a
criação de jogos com C#
XNA Framework
Framework Cross-platform game framework
e runtime
Xbox 360 CLR
Versão Customizada do
.NET Compact Framework
7. XNA Framework
Games
Your Code Your Content Components Starter Kits
Extended Framework
Application Model Content Pipeline
Core Framework
Graphics Audio Input Math Storage
Networking Gamer Services
Platform
DirectX XDK .NET Framework .NET CF
8. Games
Starter Kits Code Content Comps
Modelo de Aplicação
Extended
Framework Application Model Content Pipeline
Core
Framework Graphics Audio Input Math Storage
Platform
Direct3D XACT XINPUT XContent
Mantenha-se focado no jogo e não em qual plataforma ele
está rodando
Configurado e rodando rapidamente
As primeiras linhas de código já serão para seu jogo.
Abstração de Plataforma
Qual a melhor maneira de criar um game loop?
Como eu crio e gerencio minha janela?
Como eu sigo as melhores práticas para a plataforma?
Game
É o tipo principal de seu jogo
Eventos de Load, Update e Draw
9. Games
Starter Kits Code Content Comps
Modelo de Aplicação
Extended
Framework Application Model Content Pipeline
Core
Framework Graphics Audio Input Math Storage
Platform
Direct3D XACT XINPUT XContent
Crie componentes reusáveis que podem
facilmente ser integrados ao seu jogo
GameComponent, DrawableGameComponent
Base para todos os componentes XNA
O Autor escreve o Load, Update, e Draw
Pode descobrir e interagir com outros componentes
Game.Components
Gerenciado em tempo de execução pelo jogo
Grande suporte a „design time‟ pelo IDE
10. Games
Starter Kits Code Content Comps
XNA Framework Content Pipeline Extended
Framework Application Model Content Pipeline
Princípios de Design
Core
Framework Graphics Audio Input Math Storage
Platform
Direct3D XACT XINPUT XContent
Liberdade de escolha
Ferramenta 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
11. XNA Framework Content Pipeline
Importadores
Conteúdo de jogo adicionado ao Visual Studio
3D File
3D File 2D File Material File Audio File
2D File Material File Audio File
Formats
Formats Formats
Formats Formats
Formats Formats
Formats
.FBX
.FBX .DDS .BMP
.DDS .BMP .FX
.FX .XAP (XACT)
.XAP (XACT)
.X .JPG .PNG
Processadores .X .JPG .PNG
.TGA
.TGA
Conversões de tipo altamante tipadas
Extensões de código gerenciado
ContentManager xnaLoader = new ContentManager();
myAsset = xnaLoader.Load<Mesh>("MyAssetName");
12. Xbox 360
Lançado em Novembro de 2005
Xbox Live
Novos conceitos para os jogadores
Um grande passo para o mundo dos
games…
15. XNA 3.0
Todo o suporte já criado
melhorado
Suporte ao Zune
Zune, Xbox e Windows juntos?
Final de 2008!!!
16. XNA 2D game
“Rock Rain”
Construção de um jogo
simples
O jogador deve guiar a
nave evitando os
asteróides
É um jogo 2D simples,
baseado em sprites
17. Construção de um jogo em XNA
Basedo na forma como um jogo funciona
Todo jogo tem algums comportamentos
fundamentais:
1. Inicializa todos os recursos no início
Inicializa todas as texturas, modelos, som, etc
2. Continuamente roda o Game Loop:
1. Atualiza a game engine
Lê os controladores, atualiza o estado e a posição dos
game elements
2. Desenha o ambiente do jogo
renderiza os game elements na tela
18. Esqueleto de um jogo XNA
partial class Game1 : Microsoft.Xna.Framework.Game
{
public Game1() {
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}
protected override void LoadGraphicsContent(bool loadAllContent) {
}
protected override void Update(GameTime gameTime) {
}
protected override void Draw(GameTime gameTime) {
}
}
19. Inicialização do jogo
Texture2D cheeseTexture;
SpriteBatch spriteBatch;
protected override void LoadGraphicsContent(bool loadAllContent) {
if (loadAllContent)
{
cheeseTexture = content.Load<Texture2D>("cheese");
spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
}
}
LoadGraphicsContent é chamada quando seu jogo inicializa
Ele cria a textura do queijo e carrega uma imagem nele
Também cria um SpriteBatch para gerenciar o processo de
renderização
20. Usando o Content Pipeline
O content pipeline
gerencia os recursos
Cada recurso recebe
um nome
O método Load do
ContentManager
fornece acesso ao
recurso
Note o uso de
generics
cheeseTexture =
content.Load<Texture2D>(“rockrain");
22. Update do Jogo
protected override void Update()
{
foreach (GameComponent gc in Components)
{
if (gc is Meteor)
{
hasColision = ((Meteor)gc).CheckCollision(shipRectangle);
if (hasColision)
{
audioComponent.PlayCue("explosion");
Start();
break;
}
}
}
UpdateComponents();
}
23. Leitura do Joystick
GamePadState padState = GamePad.GetState(PlayerIndex.One);
if (padState.IsConnected)
{
if (padState.DPad.Left == ButtonState.Pressed)
{
breadX--;
}
if (padState.DPad.Right == ButtonState.Pressed)
{
breadX++;
}
/// repetir para o eixo Y do pão
}
24. Leitura analógica do Joystick
int padXSpeed = 10;
int padYSpeed = 10;
GamePadState padState = GamePad.GetState(PlayerIndex.One);
if (padState.IsConnected)
{
breadX += (int) (padState.ThumbSticks.Left.X * padXSpeed);
breadY -= (int) (padState.ThumbSticks.Left.Y * padYSpeed);
}
25. Terminando…
Recursos
Livro
http://www.amazon.com/Beginning-XNA-2-0-Game-
Programming/dp/1590599241
XNA Developer Center
http://msdn.com/xna
Blog do time do XNA
http://blogs.msdn.com/xna
Sharpgames!
http://www.sharpgames.net
Creator‟s Club
http://creators.xna.com/