IntroduçãO Ao Xna Campus Party

Preview:

Citation preview

Introdução ao XNA e ao Game Developer ExpressJosé Antonio “jalf” Leal de FariasMicrosoft Most Valuable ProfessionalComunidade SharpGames

jalf@sharpgames.nethttp://www.sharpgames.net

Quem é esse cara?

DirectX/XNA MVP

Diretor Técnico Stairs Studiohttp://www.stairs.com.br

Criador e Administrador do Sharpgameshttp://www.sharpgames.net

Livros

Colunista XBox Magazine

AgendaIntrodução

Xbox Live

Community Games

XNA Challenge

SharpGames

XNA Game StudioStarter Kit

XNA FrameworkModelo de Aplicação; Content Pipeline

Gráficos; Audio; Input

Armazenamento

Matemática

O que é XNA?

XNA Game Studio Express

Desenhado com acadêmicos, hobistas e pequenos desenvolvedores de games

Ideal para jogos casuais

Nova plataforma para desenvolvimento de jogos baseado em .NET 3.0, .NET Compact Framework

Extensão da IDE do Visual C# 2008

Grupo de bibliotecas multi-plataforma optimizada para jogos

XNA Framework

O XNA Framework é uma plataforma de desenvolvimento de jogos baseada em

.NET que pode ser usada para criar jogos para Windows e Xbox 360

Suporta as plataformas de jogos da Microsoft

Foco no jogo, não na plataforma

APIs consistentes e de fácil utilização

Instalação

.NET 3.0

Visual Studio 2008 (Qualquer Versão)

XNA Framework

XNA Game Studio

Starter Kits

Modifique os jogos e crie o seu próprio

Um jogo completamente funcionalUse como um começo para seus próprios jogos

Acessado via “New Project…”

Pressione F5 e divirta-se!

Documentação e tutoriais

Disponibilidade2 jogos incluídos com XNA Game Studio Express

Novos kits saem regularmente

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Camadas do XNA Framework

PlataformaPlataforma

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

JogosJogos

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent ComponentsComponents

Legenda XNA ForneceXNA Fornece Você ForneceVocê Fornece ComunidadeComunidade

Extended Framework

Modelo de Aplicação

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

Configurado e rodando rapidamenteAs primeiras linhas de código já serão para seu jogo.

Abstração de PlataformaQual 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

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Modelo de Aplicação

Crie componentes reusáveis que podem facilmente ser integrados ao seu jogo

GameComponent, DrawableGameComponentBase para todos os componentes XNA

O Autor escreve o Load, Update, e Draw

Pode descobrir e interagir com outros componentes

Game.ComponentsGerenciado em tempo de execução pelo jogo

Grande suporte a ‘design time’ pelo IDE

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

XNA Framework Content PipelinePrincípios de Design

Liberdade de escolhaFerramenta de criação de conteúdo

Game engines

Menos código para a criaçãoMais tempo para a criação do jogo

Forte integração entre código e conteúdoBuild de código e de conteúdo unificados

XNA Framework Content Pipeline

ImportadoresConteúdo de jogo adicionado ao Visual Studio

ProcessadoresConversões de tipo altamante tipadas

Extensões de código gerenciado

3D File Formats

2D File Formats

Material File Formats

Audio File Formats

.FBX.X

.DDS

.BMP .JPG .PNG

.TGA

.FX .XAP (XACT)

ContentManager xnaLoader = new ContentManager(); myAsset = xnaLoader.Load<Mesh>("MyAssetName");

Core Framework

GraphicsFornece recursos de renderização de baixo

nível

Construído sob o Direct3D 9APIs atualizadas que seguem as regras do .NET

EfeitosRecursosLock/UnlockVertex streams

Recursos fornecidosModel, Mesh, BonesTexturasEfeitos e shaders

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

XNA Framework Effects

XNA Framework Effects

Audio

É muito fácil tocar seus sons

Construa seus pacotes de som usando a ferramenta XACT

Adicionar sons

Ajustar propriedades

Construir bancos de sons

Fácil integração para desenvolvedoresAcesse-os via seus nomes lógicos

Looping, streaming, e gerenciamento de memória

Sem gerenciamento de buffer de baixo nível

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Input

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

Pronto para usarSem inicialização

Sem gerenciamento de estado

DispositivosJoystick do Xbox 360

Teclado

Mouse (apenas no Windows)

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Storage

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

StorageContainer atua como um sistema de arquivos virtual

Arquivos armazenados no local correto de cada plataforma

Suporta mútiplos dispositivos de armazenamento e perfis no Xbox 360

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

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Math

Biblioteca de funções matemáticas para jogos

Vector, Matrix, Quaternion, Plane, AABB, Sphere, Ray, Frustum, Curve

Regra-da-mão-direita por default

Fácil integração

Testes de intersecção

Facilitadores para movimentos

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Criando Jogos para o Xbox 360

Pré-requisitos e Instalação

Assinatura da Xbox live

XNA Creator’s Club (US$99 por um ano)

Instale o XNA Game launcher a partir da Xbox marketplace

Compre o XNA Creaters Club a partir Xbox marketplace

Para obter seu código de conexão, rode o XNA Game launcer de: GamesDemos and More no Xbox 360

Xbox 360 Development

Experiência de desenvolvimento

Project templates para jogos do Xbox 360

F5 faz o deploy para o console

Remote debuggingBreakpointsWatches

Debug e Trace para o PC

Sem Edit and Continue

Debug Visualizers

PlatformPlatform

CoreCoreFrameworkFramework

ExtendedExtendedFrameworkFramework

GamesGames

XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D

GraphicsGraphics AudioAudio InputInput MathMath StorageStorage

Application ModelApplication Model Content PipelineContent Pipeline

Starter KitsStarter Kits CodeCode ContentContent Comps

Criando um jogo

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

Construção de um jogo em XNABasedo na forma como um jogo funciona

Todo jogo tem algums comportamentos fundamentais:

1. Inicializa todos os recursos no inícioInicializa todas as texturas, modelos, som, etc

1. Continuamente roda o Game Loop:1. Atualiza a game engine

Lê os controladores, atualiza o estado e a posição dos game elements

1. Desenha o ambiente do jogorenderiza os game elements na tela

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) { } }

Inicialização do jogo

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

Texture2D cheeseTexture;

SpriteBatch spriteBatch;

protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { cheeseTexture = content.Load<Texture2D>("cheese"); spriteBatch = new SpriteBatch(graphics.GraphicsDevice); }}

Usando o Content PipelineO 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");

XNA Game Drawingprotected override void Draw(GameTime gameTime){ graphics.GraphicsDevice.Clear(Color.Black);

// Desenha o Background spriteBatch.Begin(); spriteBatch.Draw(backgroundTexture,new Rectangle(0, 0,

graphics.GraphicsDevice.DisplayMode.Width, graphics.GraphicsDevice.DisplayMode.Height),Color.LightGray);

spriteBatch.End();

// sprites spriteBatch.Begin(SpriteBlendMode.AlphaBlend); base.Draw(gameTime); spriteBatch.End();}

Update do Jogoprotected 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();}

Leitura do JoystickGamePadState 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}

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);}

Xbox LIVE Arcade??Xbox Live é o lugar para usuários que querem testar e comprar conteúdo no Xbox 360

Xbox Live Arcade contém conteúdo de jogos

Alta Visibilidade em qualquer console (Aba ‘Games’)

Integração com o Marketplace (Download, compra, licenças)Disponível para assinantes Silver & Gold Banner de promoção de novos títulosDiversos recursos para a retenção e re-play de jogos

Introdução a Xbox Live ArcadeUsuários & receita continuam a crescer+80 jogos disponíveis atualmente

Um ou mais títulos chegam por semana

Melhor serviço de download de jogos em um console no mercadoNovos Jogos

Clássicos

Jogos Independentes

Conectado aos serviços da Live (MSN)

Crescimento do Serviço

Audiência EngajadaMais de 45,000,000 de jogos baixados

Mais de 80,000,000 de horas de jogoIsso é mais de 9,100 homens-ano

Mais de 170,000,000 de partidas

Mais de 45,000,000 de Achievements obtidos

Mais de 550,000,000 em Gamerscore

Títulos mais jogados em 2007By Users By Average Session

LengthBy Total Minutes

1 TMNT 1989 Arcade Jewel Quest UNO

2 Worms Hardwood Spades Texas Hold ‘Em

3 UNO Catan Worms

4 Castlevania Bejeweled 2 Castlevania

5 3D Minigolf Adventures Texas Hold ‘Em Bejeweled 2

6 Paperboy Castlevania Geometry Wars

7 Alien Hominid Zuma Zuma

8 Geometry Wars Soltrio Solitaire Aegis Wing

9 Texas Hold ‘em Worms Catan

10 Heavy Weapon Luxor 2 3D Minigolf Adventures

Azul – 2007

Laranja – 2006

Verde - 2005

Detalhes de VendasDownloads e taxas de conversão

Títulos originais conseguem cerca de 350k downloads no primeiro mês

Grandes hits conseguem us$125K em vendas na primeira semana

Games continuam com vendas significantes ao longo de sua vida.

Volume de vendas sobre o tempoO gráfico mostra a média de todos os jogos do serviçoPrimeiros dois meses de vendas correspondem a 35% do volume totalVendas tem uma pequena queda após o sétimo mês

Melhores Título (Jul 06 – Jun 07)By Sales Volume By Revenue By Conversion Rate

1 Street Fighter II HF Street Fighter II HF TMNT 1989

2 UNO Worms UNO

3 TMNT 1989 DOOM Texas Hold ‘em

4 Worms Castlevania Street Fighter II HF

5 DOOM Ultimate Mortal Kombat 3

Worms

6 Castlevania Texas Hold ‘em Castlevania

7 Ultimate Mortal Kombat 3

UNO GALAGA

8 PAC-MAN Bankshot Billiards 2 Ultimate Mortal Kombat 3

9 Geometry Wars LUMINES LIVE! PAC-MAN

10 Contra TMNT 1989 DOOM

Azul – 2007

Laranja – 2006

Verde - 2005

Performance de download de conteúdo para jogos

636000 Downloads pagos107000 Temas de jogos

360000 Conteúdo de jogos (novas fases, etc.)

170000 Imagens e Fotos

Downloads gratuitos1.055.000 downloads

Resumo – Conteúdo não vai torná-lo rico, mas é uma interessante fonte de receita

Presença de Mercado

Como é um jogo da Xbox LIVE Arcade?

Completa experiência de jogoSem pedaços de jogos separadosNão deve ter dependências

Pequeno em Tamanho<150 MB (a maioria tem <50 MB)Jogável sem mídia física ou qualquer outra dependênciaSem necessidade de manual de instruções“Baixar e jogar”

Versão de testes limitada mas divertidaDeve oferecer a opção de compra da versão completaPromoção de venda do jogo dentro do jogo é permitida

Experiências de jogo associadas a Live ArcadeRanks globaisAchievements & GamerscoreConvites entre jogos

‘Aba’ da Xbox Live Arcade

Como os jogos chegam a Arcade

DesenvolvedorDesenvolvedor

PublisherPublisherArcade Arcade

Publishing Publishing TeamTeam

Gerência do Gerência do PortfólioPortfólio

Microsoft Microsoft 3PP Team3PP Team

E os jogos da comunidade?Revisados pelo membros do Creator’s ClubCritérios como violência, sexo, sangue, etc.Critérios TécnicosFormado EXCLUSIVAMENTE pela comunidade

Que tipo de games estamos procurando?

Nós queremos jogos que …

… sejam atraentes

“Baixar e jogar”

“Divertido para toda a família”

“Divertido para todas as idades”

Jogos casuais

… suportem vários dispositivos

Social em sua natureza

Controladores mais atrativos

Quebrar paradigmas

… inspirem

Saúde física e mental

Ensinem sobre o mundo realFaça você uma pessoa melhor

Ajudar os outros

…unam as pessoasJogos sociais

MultiplayerCompetitivoCooperativo“Backseat driver”Party Games

… Jogos que funcionem entre plataformas

O que isso tudo significa para você?

Primeiro, negócio é negócio: Se você tem um grande jogo, nos queremos vê-lo

Compreendendo o valor de seu serviço para o cliente vai lhe ajudar a criar um melhor jogo para ele

Novas áreas de interesse:Simples, Atrativos

Suporte a vários tipos de controladores

Temas e conteúdo inspirativos

Social, Social, Social

Guia de ConceitoOs 6 Pilares do que queremos em jogos

Inovação

Jogabilidade

Visual

Multiplayer & Social

Plataformas

Global

Jogabilidade

Tem de caber em 150 MB!

Idéias únicas

“Baixar e jogar”

Permitir pequenas seções de jogo

‘Planejado para a família INTEIRA

Opções para crianças

Dificuldade progressiva

VisualEste jogo merece estar no Xbox 360?

Re-Design, não apenas um porte

Exemplos: RoboBlitzSmall ArmsJetpac Refuelled

MultiplayerXbox LIVE & desenhado para poucos participantes

“Join In Progress”

Migração de HostMultiplayer Local (2+ em um console)Co-Op

Experiências SociaisOffline gameplay & tracking

Apelo Global

Planeje seu jogo com o mercado global em mente

LocalizaçãoInglês, Frances, Italiano, Alemão, Espanhol, Japonês, Koreano, Chinês (tradicional), Português (pt-br opcional).

Dúvidas?

José Antonio “jalf” Leal de FariasMicrosoft Most Valuable Professional

jalf@sharpgames.netwww.sharpgames.netTwitter: @sharpgames

Get the free app for your phone at

http :// gettag . mobi

S

N

A

P

I

T