Você está na página 1de 85

Desenvolvimento de Jogos 2D com XNA

Kleber de Oliveira Andrade pdjkleber@gmail.com

Universidade de So Paulo USP

Escola de Engenharia de So Carlos EESC


Departamento de Dinmica de Sistemas e Controles Maio/2010

Bacharel em Cincia da Computao


Escola de Engenharia de Piracicaba (EEP) Ttulo: Um algoritmo evolutivo para adaptao dos NPCs em um jogo de ao.

Mestrando em Engenharia Mecnica


Escola de Engenharia de So Carlos (USP/EESC) Ttulo: Planejadores neurais para manobra de baliza de um automvel de passeio utilizando sensor laser, ultrassnicos e viso artificial.

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


2010 Kleber de Oliveira Andrade 2

Uma breve Introduo A Indstria de Jogos Digitais


Viso sobre o XNA Conhecimentos bsicos de XNA Reviso de Programao C# Criando um Jogo 2D completo
2010 Kleber de Oliveira Andrade 3

2010 Kleber de Oliveira Andrade

1958: Tennis for Two jogo que funcionava em um osciloscpio (Willy Higinbotham)

1961: Space Wars jogo desenvolvido no computador PDP-1 por Steve Russel, o jogo tinha 2Kb

2010 Kleber de Oliveira Andrade

Dcada de 70 considerada uma Odissia Comercial, muitos jogos foram desenvolvidos.


Depois do Crash da Indstria em 1983/84, surgiu uma revoluo nos jogos

1979: Asteroids
A dcada de 90, muitos consoles foram lanados e em 1992 uma nova evoluo com os jogos FPS.

Donkey Kong (1984)

Wolf 3D (1992)
2010 Kleber de Oliveira Andrade 6

Qualidade grfica evidncia a evoluo no desenvolvimento de jogos, assim como sua Inteligncia Artificial.

God of War III Jogos que envolvem centenas de profissionais das mais diversas reas, e altos oramentos.

X Games SnoCross
2010 Kleber de Oliveira Andrade 7

A discusso no se restringe apenas grficos ou inteligncia artificial. O que esperar ento ?


Facilidade de criao ? Comunidades ? Interface com o jogador ? Inovao? Prazer de jogar por horas e horas ?
2010 Kleber de Oliveira Andrade 8

The Harvest 3

Racing Game
2010 Kleber de Oliveira Andrade

City Rain
9

2010 Kleber de Oliveira Andrade

10

uma das mais rentveis do mundo


Faturamentos de 2007 supera a indstria de msica e cinema juntos.

Parece coisa de criana, mas no .


75% dos chefes de famlia jogam Mdia de idade de jogadores: 30 anos Mdia de idade de compradores: 37 anos
Dados da ESA (2008 video-game indutry facts), http://www.theesa.com

2010 Kleber de Oliveira Andrade

11

Serious Game (Treinamento e Capacitao)

Battlezone

Econorte (Oniria)

Blossom
2010 Kleber de Oliveira Andrade 12

Advergames (Propagandas)

1993 - Cool Spot (7-Up)

1983 - Pepsi Invaders

Rooftop Racer

1990 - Yo! Noid (Dominos Pizza)


2010 Kleber de Oliveira Andrade 13

Educacionais (Jogos cujo objetivo ensinar)

Project Beauty

Alice

Big Brain Academy: Wii Degree


2010 Kleber de Oliveira Andrade 14

God games (Softwares Toys)

Black & White

The Sims
2010 Kleber de Oliveira Andrade 15

Criar jogos demanda muito conhecimento tcnico. Acesso aos Kits de desenvolvimento
Restrito Caro Complexo

Desenvolver para qual plataforma? Faltavam comunidades! Quais as chances de sucesso para quem esta comeando?
2010 Kleber de Oliveira Andrade 16

2010 Kleber de Oliveira Andrade

17

Xna No um Acrnimo

2010 Kleber de Oliveira Andrade

18

2010 Kleber de Oliveira Andrade

19

Para desenvolver / jogar no PC


Nenhum! Tudo atravs de ferramentas gratuitas (Visual C# Express Edition, XNA Game Studio e recursos da comunidade).

Para desenvolver / jogar no Xbox 360.


Licena 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 construda sobre o DirectX Jogos desenvolvidos com linguagens .NET Desenvolvimento para plataforma Windows API construda 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

Jogos

Starter Kits

Code

Content

Components

Extended
Framework

Application Model

Content Pipeline

Core Framework

Graphics

Audio

Input

Math

Storage

Network

Plataforma

Direct3D

XACT

XINPUT

XCONTENT

Legenda:

XNA Prov

Voc cria
2010 Kleber de Oliveira Andrade

Comunidade
22

Jogos

Starter Kits

Code

Content

Components

Extended Framework

Application Model

Content Pipeline

Core

Graphics

Audio

Input

Math

Storage

Network

Framework

Plataforma

Direct3D

XACT

XINPUT

XCONTENT

2010 Kleber de Oliveira Andrade

23

Modifique os jogos e crie o seu prprio

2010 Kleber de Oliveira Andrade

24

Jogos

Starter Kits

Code

Content

Components

Extended Framework

Application Model

Content Pipeline

Core

Graphics

Audio

Input

Math

Storage

Network

Framework

Plataforma

Direct3D

XACT

XINPUT

XCONTENT

2010 Kleber de Oliveira Andrade

25

Mantenha-se focado no jogo e no em qual plataforma est rodando Faz o servio chato e trabalhoso para voc Desenvolvimento acelerado Possui recursos avanados Extensvel Game

2010 Kleber de Oliveira Andrade

26

Liberdade de escolha
Ferramentas de criao de contedo Game engines

Menos cdigo para a criao


Mais tempo para a criao do jogo

Forte integrao entre cdigo e contedo


Build de cdigo e de contedo unificados
2010 Kleber de Oliveira Andrade 27

2010 Kleber de Oliveira Andrade

28

Jogos

Starter Kits

Code

Content

Components

Extended Framework

Application Model

Content Pipeline

Core

Graphics

Audio

Input

Math

Storage

Network

Framework

Plataforma

Direct3D

XACT

XINPUT

XCONTENT

2010 Kleber de Oliveira Andrade

29

Fornece recursos de renderizao de baixo nvel Construdo 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 Creation Tool)


Adiciona sons Ajusta propriedades Construir bancos de sons

Fcil integrao para desenvolvedores


Acesse-os via seus nomes lgicos Looping, streaming, e gerenciamento de memria Sem gerenciamento de buffer de baixo nvel

2010 Kleber de Oliveira Andrade

31

Torna fcil a obteno de dados de entrada


Dispositivos
Keyboard Mouse (apenas para Windows) Xbox 360 (Gamepad, guitarra, tambores, volantes, etc...)

Modelo de programao imediato


No demanda inicializao No demanda gerenciamento de estados Basicamente tira uma fotografia dos estados de todos os botes
2010 Kleber de Oliveira Andrade 32

Fornece um jeito fcil para ler e salvar informaes do jogo Atua como um sistema de arquivos virtuais
Arquivos armazenados no local correto de cada plataforma Suporta mltiplos dispositivos de armazenamento e perfis no Xbox 360

Baseado em Streams, o que facilita a integrao com o System.IO


2010 Kleber de Oliveira Andrade 33

Biblioteca de funes matemticas para jogos


Vector, Matriz, Quaternion, Plane, AABB, Sphere, Ray, Frustum, Curve Regra-da-mo-direita por default Fcil integrao Testes de intereseces Facilitadores para movimentos
2010 Kleber de Oliveira Andrade 34

Conexo entre Xbox 360 e PC Conexo local e via LIVE!


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

Na verso 3.1
Ranked matchmaking Venda de jogos na Live Community! Conexo de at 8 Zunes em rede ad-hoc

2010 Kleber de Oliveira Andrade

35

Jogos

Starter Kits

Code

Content

Components

Extended Framework

Application Model

Content Pipeline

Core

Framework

Graphics

Audio

Input

Math

Storage

Plataforma

Direct3D

XACT

XINPUT

XCONTENT

2010 Kleber de Oliveira Andrade

36

Skinning & Animation

Distortion

Shatter Effects
2010 Kleber de Oliveira Andrade

3D Particles
37

AbduX
Jogo completo, feito em 4 dias, por 1 pessoa Explora recursos grficos, sons, input e fontes no XNA alm 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 verso Professional Runtime do DirectX

Para rodar:
Placa de vdeo compatvel 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 pela Microsoft.


Sua interface simples e intuitiva. Muito recomendada para usurios iniciantes em programao na linguagem C#. A verso Express no 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 com interface amigvel desenvolvido pela Microsoft para criar jogos tanto para PC quanto para o console XBox 360.
XNA 3.1 (lanada em 03/07/2009)

Ao concluir o download do XNA 3.1 hora de instalar. Aps possuir o XNA instalado em seu computado, chega a hora de ver se tudo est funcionando corretamente.
2010 Kleber de Oliveira Andrade 44

File New Project

Solution Explorer

2010 Kleber de Oliveira Andrade

45

Aps 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

Initialize()

LoadContent()

Update()

Game Loop

Trmino da aplicao

UnloadContent()

Draw()

2010 Kleber de Oliveira Andrade

47

2010 Kleber de Oliveira Andrade

48

Pasta Content, boto direito do mouse... Add -> Existing Item Criar uma varivel do tipo Texture2D
Texture2D image;

Carregar a imagem (mtodo LoadContent)


image = Content.Load<Texture2D>(fantasma);

Desenhar a imagem na tela (mtodo 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 variveis.


Vector2 position = new Vector2(100.0f, 100.0f); KeyboardState keyState;

No mtodo Draw, troque new Vector2(100.0f, 100.0f) pela varivel position que criamos.

No mtodo 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 mtodo Update que manipulam a imagem com o teclado.


Adicione uma varivel de estado para o mouse
MouseState mState;

No mtodo 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 informao dele


<FontName>Arial</FontName>

Crie uma varivel do tipo SpriteFont


SpriteFont sFont;

Carregue a font que voc criou no mtodo LoadContent


sFont = Content.Load<SpriteFont>(fontArial);

Escreva as informaes na tela dentro do mtodo Draw, entre os comandos Begin() e End()
spriteBatch.DrawString(sFont, "X = " + position.X.ToString(), new Vector2(10.0f, 10.0f), Color.White); spriteBatch.DrawString(sFont, "Y = " + position.Y.ToString(), new Vector2(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 movimentos do personagem.

aps

fazer

os

2010 Kleber de Oliveira Andrade

56

Adicione a msica na pasta Content do seu projeto


Add -> Existent Item

Declare uma varivel do tipo Song


Song music;

Carregar a msica no LoadContent


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

2010 Kleber de Oliveira Andrade

57

Para tocar a msica digite o seguinte cdigo tambm no LoadContent MediaPlayer.Play(music); Para fazer a msica 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 varivel do tipo SoundEffect


SoundEffect collision;

Carregar a msica no LoadContent


collision = Content.Load<SoundEffect>(collision);
2010 Kleber de Oliveira Andrade 59

Declare uma vriavel de coliso como booleana


bool collsion;

No mtodo Update, deixe collision sempre como falso e quando acontecer uma coliso do fantasma com a parede troque o valor para verdadeiro. Ento verifica se collision verdadeiro e toque o som.
if (collision) sound.Play();
2010 Kleber de Oliveira Andrade 60

Raio r2

Raio r1

Coliso em X Centro C2 Centro C1

Coliso em Y

Existe coliso se: dist(c1,c2) < r1 + r2


Coliso completa
2010 Kleber de Oliveira Andrade 61

GameComponent
Automatiza alguma mtodos sobrecarregando-os, menos a parte de desenho Exemplo prtico

DrawableGameComponent
Automatiza alguma mtodos sobrecarregando-os, inclusive a parte de desenho Exemplo prtico

GameServices
Disponibiliza servios de objetos para outras classes Exemplo prtico
2010 Kleber de Oliveira Andrade 62

2010 Kleber de Oliveira Andrade

63

A Linguagem C#:
uma linguagem orientada a objeto, moderna, desenhada a fim de aumentar a produtividade do programador. C# utilizado por milhares de programadores e analistas e prov acesso total a tecnologia utilizando o .Net Framework, O Compact Framework e mais recentemente o XNA Framework

2010 Kleber de Oliveira Andrade

64

namespace usada para declarar um escopo. Este escopo permite voc organizar o cdigo e oferece uma maneira parar criar tipos exclusivos.

2010 Kleber de Oliveira Andrade

65

#region e #endregion directiva para incluir uma regio dentro do cdigo, facilitando a vida do programador, podendo este visualizar apenas o cdigo de interesse no momento.

2010 Kleber de Oliveira Andrade

66

Comentrios /* ... */ e //

2010 Kleber de Oliveira Andrade

67

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

com using

sem using
2010 Kleber de Oliveira Andrade 68

Variveis:
Tipos C# bool byte sbyte char decimal double float int uint long ulong object Valores possveis de se armazenar true ou false (valores booleanos) 0 a 255 (8 bits) -128 a 127 (8 bits) Um caractere qualquer (16 bits) 1.0 x 10-28 a 7.9 x 1028 (128 bits) 5.0 x 10-324 a 1.7 x 10308 (64 bits) 1.5 x 10-45 a 3.4 x 1038 (32 bits) -2,147,483,648 a 2,147,483,647 (32 bits) 0 a 4,294,967,295 (32 bits) -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (64 bits) 0 a 18,446,744,073,709,551,615 (64 bits) Qualquer tipo

short
ushort string

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


0 a 65,535 (16 bits) Seqncia de caracteres (16 bits por caractere)

2010 Kleber de Oliveira Andrade

69

Operadores
Category Primary Unary Multiplicative Additive Shift Relational Equality Logical AND Logical XOR Logical OR Conditional AND Conditional OR Operator(s) (x) x.y f(x) a[x] x++ x- - new typeof sizeof checked unchecked + - ! ~ ++x - -x (T)x * / % + << >> < > <= >= is == != & ^ | && || Associativity Left Left Left Left Left Left Right Left Left Left Left Left

Ternary
Assignment

? :
= *= /= %= += -= <<= >>= &= ^= |=

Right
Right

2010 Kleber de Oliveira Andrade

70

Vetores Multidimensionais (arrays):

2010 Kleber de Oliveira Andrade

71

Entrada e Sada padro:

2010 Kleber de Oliveira Andrade

72

Estrutura condicional IF/ELSE:

2010 Kleber de Oliveira Andrade

73

Lao de repetio FOR:

2010 Kleber de Oliveira Andrade

74

Lao de repetio WHILE:

2010 Kleber de Oliveira Andrade

75

Lao de repetio FOREACH:


O lao foreach usado quando queremos percorrer todos os elementos de um array (matriz) ou de colees de dados, tais como uma ArrayList.

2010 Kleber de Oliveira Andrade

76

Listas:

2010 Kleber de Oliveira Andrade

77

Tratamento de erros:

2010 Kleber de Oliveira Andrade

78

Classes Construtor Atributos e mtodos

2010 Kleber de Oliveira Andrade

79

Herana, Polimorfismo, Encapsulamento e Enumeradores.

2010 Kleber de Oliveira Andrade

80

2010 Kleber de Oliveira Andrade

81

2010 Kleber de Oliveira Andrade

82

XNA Tap
Construo de um jogo simples Construo 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 (Traduo: Altair Dias Caldas de Moraes). 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 maro de 2010] XNA Creators Club, http://creators.xna.com [acessado em abril 2010]

2010 Kleber de Oliveira Andrade

84

Obrigado !
Kleber de Oliveira Andrade pdjkleber@gmail.com
http://kleberandrade.wordpress.com