• Nenhum resultado encontrado

JOGOS ELETRÔNICOS UTILIZANDO BLENDER E XNA

N/A
N/A
Protected

Academic year: 2021

Share "JOGOS ELETRÔNICOS UTILIZANDO BLENDER E XNA"

Copied!
88
0
0

Texto

(1)

CURSO DE SISTEMAS DE INFORMAÇÃO (BACHARELADO)

SAMUEL ANTONIO DAMBRÔSO

JOGOS ELETRÔNICOS

UTILIZANDO BLENDER E XNA

(2)

JOGOS ELETRÔNICOS

INTEGRANDO BLENDER E XNA

Trabalho de Conclusão de Curso submetido à Universidade do Planalto Catarinense para obtenção dos créditos de disciplina com nome equivalente no curso de Sistemas de Informação - Bacharelado.

Orientação: Prof. Wilson Castello Branco Neto, Dr.

(3)

JOGOS ELETRÔNICOS INTEGRANDO

BLENDER E XNA.

ESTE RELATÓRIO, DO TRABALHO DE CONCLUSÃO DE CURSO, FOI

JULGADO ADEQUADO PARA

OBTENÇÃO DOS CRÉDITOS DA

DISCIPLINA DE TRABALHO DE

CONCLUSÃO DE CURSO, DO 8º.

SEMESTRE, OBRIGATÓRIA PARA

OBTENÇÃO DO TÍTULO DE:

BACHAREL EM SISTEMAS DE

INFORMAÇÃO

Lages (SC), 07 de Dezembro de 2009

Prof. Wilson Castello Branco Neto, Dr. Orientador

BANCA EXAMINADORA:

Prof. Daiana Petry Leite, M.Sc. UNIPLAC

Prof. Alexandre Perin de Souza, M.Sc. UNIPLAC

Prof. Wilson Castello Branco Neto, Dr Professor de TCC

(4)
(5)

Agradeço ao meu orientador Wilson Castello, pela paciência e por me motivar dizendo que a corda já estava no meu pescoço e a água na bunda, em cada orientação.

(6)
(7)

LISTA DE ABREVIATURAS E SIGLAS

3D - Três Dimensões

AIFF - Audio Interchange File Format DCC - Digital Content Creation FPS - First Person Shot

IDE - Integrated Development Environment NPC - Non-Playable Character

PC - Personal Computer

RPG - Role Playing Game

TCC - Trabalho de Conclusão de Curso

WAV - WAVEform

(8)

RESUMO

Cada vez mais os jogos estão inseridos na vida das crianças e adultos, no mundo inteiro. O desenvolvimento de jogos vem ganhando cada vez mais força e mais mercado, devido ao crescimento da indústria de entretenimento. Com base nisto, foi realizado um estudo sobre duas ferramentas de desenvolvimento de jogos, o Blender, ferramenta open source de desenvolvimento 3D e o XNA, ferramenta de criação de jogos da Microsoft. O Blender é uma ferramenta com vários recursos, um motor de jogo embutido, editor de vídeos, imagens, e capaz de criar animações em alta resolução e também projetos arquitetônicos profissionais. Sua grande vantagem em relação às outras ferramentas existentes no mercado é o fato de ser gratuita. O XNA permite ao desenvolvedor criar jogos para computador e XBOX (Console de jogos da Microsoft), utilizando tanto personagens 3D como 2D. O estudo destas ferramentas apresenta formas de modelagem de personagens e cenários, como a Edge Loops e Base Mesh, que permitem elaborar personagens orgânicos, como humanóides, com grande quantidade de detalhes e com uma movimentação que flui normalmente em um jogo, sempre limitando a modelagem dos mesmos, de acordo com os requisitos de sistema impostos. Apresentam-se também as etapas a serem seguidas para importar os modelos criados no Blender dentro do XNA, e utilizá-los no jogo a ser desenvolvido. Para apresentar as ferramentas estudadas foi criado um jogo de estratégia, baseado em turnos, em que o jogador deve através de cada movimento, buscar a vitória derrotando os inimigos existentes no campo de batalha.

(9)

ABSTRACT

Each time more and more games are embedded in the lives of children and adults through the entire world. The games developments are gaining more strength and more market because of the growth of this industry of entertainment. With basis on this, a study was conducted on two tools for game development, Blender, open source tool for developing 3D and XNA, a tool for game development at Microsoft. The Blender is a powerful full-featured, with a game engine built-in, video editor, images, and able to create animations in high resolution and also architectural professionals projects. Its great advantage over other tools on the market is the fact that it is free. The XNA allows developers to create games for PC and Xbox Console (Microsoft Games), using both 2D and 3D characters. The study of these tools introduces ways of modeling characters and environments, such as Edge Loops, and Base Mesh, on which is possible to build organic characters like humanoids, with lots of details and a movement that normally flows into a game, always limiting the modeling, according to the system requirements imposed. It also presents the steps to follow to import models created in the Blender and in the XNA and use them on a game to be developed. For show the explored tools, was created a strategy turn based game, where the player should, through each movement, find victory defeating existing enemies on the war field.

(10)

LISTA DE ILUSTRAÇÕES

FIGURA 1 - Modelagem inicial... 19

FIGURA 2 - Cubo com o modificador subsurf aplicado. ... 20

FIGURA 3 - Resultado final dos personagens. ... 21

FIGURA 4 - Cenário do jogo desenvolvido no TCC. ... 22

FIGURA 5 - Segundo cenário modelado para o jogo. ... 22

FIGURA 6 - Logotipo desenvolvido para o jogo... 33

FIGURA 7 - Lewis Nixon ... 36

FIGURA 8 - Richard Winters ... 36

FIGURA 9 - Wild Guarnere ... 37

FIGURA 10 - Herbert Sobel ... 37

FIGURA 11 - Personagens do jogo ... 39

FIGURA 12 - StoryBoard do jogo desenvolvido no TCC ... 40

FIGURA 13 - Trailer de introdução do jogo. ... 44

FIGURA 14 - Object mode ... 46

FIGURA 15 - Menu do Blender para exportação do modelo para o XNA... 47

FIGURA 16 - Menu gerado pelo script de exportação do DirectX. ... 48

FIGURA 17 - Solution Explorer do XNA, em destaque o modelo e sua textura. ... 49

FIGURA 18 - Janela inicial do XACT. ... 58

FIGURA 19 - Lista de sons presentes no Wave Bank criado. ... 58

FIGURA 20 - Edição de sons do Sound Bank no XACT. ... 59

FIGURA 21 - Vídeo de introdução do jogo. ... 68

FIGURA 22 - Vídeo apresentando o título do jogo. ... 69

FIGURA 23 - Menu prinicipal do jogo. ... 69

FIGURA 24 - Menu de seleção de batalhas. ... 70

FIGURA 25 - Tela com o menu da segunda batalha. ... 71

FIGURA 26 - Primeira batalha, detalhe para a movimentação do personagem. ... 71

FIGURA 27 - Cena de uma batalha ... 72

QUADRO 1 - Método construtor da Classe Game1 ... 25

QUADRO 2 - Método responsável por inicializar os recursos necessários. ... 25

QUADRO 3 - Métodos Load e Unload. ... 25

QUADRO 4 - Método Update, o “Motor do Jogo”. ... 26

QUADRO 5 - Método Draw, responsável por desenhar os gráficos na tela. ... 27

(11)

QUADRO 7 - Método Initialize e a inicialização dos objetos declarados. ... 50

QUADRO 8 - Populando o objeto myModel do tipo Model. ... 51

QUADRO 9 - As propriedades necessárias para desenhar um objeto 3D no XNA .... 51

QUADRO 10 - Declaração da variável gameState. ... 52

QUADRO 11 - Utilização do gameState ... 53

QUADRO 12 - Utilização do gameState no método Update ... 53

QUADRO 13 - Inicialização dos objetos para apresentação de um vídeo no XNA. .. 54

QUADRO 14 - Trecho de código responsável por renderizar o vídeo no jogo. ... 54

QUADRO 15 - Chamada da classe CreateMenu ... 55

QUADRO 16 - Declaração das variáveis do menu principal do jogo. ... 55

QUADRO 17 - Método construtor da classe CreateMenu e a as variáveis. ... 56

QUADRO 18 - Método responsável por desenhar os itens do menu no jogo. ... 56

QUADRO 19 - Desenhando uma textura na tela do jogo. ... 57

QUADRO 20 - Código que exemplifica a atribuição de valores no XACT. ... 60

QUADRO 21 - Chamada da função que executa o som no XNA. ... 60

QUADRO 22 - Captura de teclas. ... 60

QUADRO 23 - Garbage Colletor ... 61

QUADRO 24 - Criação do menu de seleção de batalhas ... 61

QUADRO 25 - Método que identifica o item selecionado no menu. ... 62

QUADRO 26 - Tratamento realizado ao selecionar um item do menu. ... 62

QUADRO 27 - Criação do mapa de batalha ... 63

QUADRO 28 - Controle de movimento da seta no mapa de batalha ... 63

(12)

RESUMO ... 7 ABSTRACT ... 8 1 INTRODUÇÃO ... 13 1.1 Apresentação ... 13 1.2 Descrição do problema ... 14 1.3 Justificativa ... 14 1.4 Objetivo geral ... 15 1.5 Objetivos específicos ... 15 1.6 Metodologia ... 15 2 BLENDER E XNA ... 17

2.1 Modelagem dos personagens no Blender ... 17

2.2 Modelagem dos cenários ... 21

2.3 XNA ... 23

2.3.1 Recursos ... 23

2.3.2 Principais classes e aspectos relevantes ... 24

2.4 Conclusão ... 27

3 GAME DESIGN ... 29

3.1 Conceitos ... 29

3.2 Game Design ... 30

3.2.1 Definição do tipo de jogo ... 31

3.2.2 Escolha do nome ... 32

3.2.3 Criação do logotipo ... 33

3.2.4 Roteiro ... 34

3.2.5 Criação dos personagens ... 35

3.2.6 Modelagem ... 38

3.2.7 Storyboard ... 39

3.2.8 Criação de cenários ... 40

3.2.9 Sons ... 41

3.2.10 Definição das regras de jogo ... 42

3.2.11 Testes ... 42

3.2.12 Manual de instruções... 43

3.2.13 Trailer de abertura ... 44

(13)

4 IMPLEMENTAÇÃO E APRESENTAÇÃO DO SISTEMA ... 46

4.1 Importação dos modelos criados no Blender ... 46

4.2 Implementação da lógica de jogo ... 52

(14)

1 INTRODUÇÃO

1.1 Apresentação

Os jogos eletrônicos são considerados uma das mais expressivas práticas de entretenimento do século 21. O termo jogo eletrônico pode ser definido como um jogo que utiliza a base eletrônica para funcionar, então um jogo é um software (PERUCIA, 2007).

Pode-se dividir um jogo em duas partes, a interface responsável por apresentar ao usuário o gráfico do jogo, personagens, cenários e músicas; e a parte lógica, que não pode ser visualizada pelo usuário final, mas é responsável pela implementação do jogo, como ações, movimentos e pontos de colisão de personagens e do cenário.

Este trabalho aborda o desenvolvimento de um jogo para Personal Computer (PC) utilizando a ferramenta Blender para construção da interface gráfica e o XNA para implementação da lógica do jogo. Ele apresenta uma documentação que instrui desenvolvedores de jogos a fazer a integração das ferramentas citadas, bem como apresenta termos e conceitos utilizados na área de desenvolvimento de jogos.

(15)

considerados na escolha do tema e também é desenvolvido o projeto do jogo. O capítulo quatro apresenta como os modelos criados no Blender são transformados em imagens e utilizados no XNA, juntamente com a lógica do jogo. O resultado final deve ser um jogo para computador completamente funcional. No capítulo cinco são apresentadas as conclusões obtidas no decorrer do TCC.

1.2 Descrição do problema

O crescimento da indústria de jogos eletrônicos levou à criação de muitas ferramentas para o desenvolvimento deste tipo de software, tanto na parte gráfica quanto na programação da lógica dos mesmos. Contudo, estas tecnologias não são facilmente incorporadas a um mesmo projeto, ocorrendo, muitas vezes, problemas em função principalmente da heterogeneidade das tecnologias.

1.3 Justificativa

A indústria de jogos de computador para entretenimento é uma das mais significativas no setor da informática, com um faturamento, somente em 2007, de 10,7 bilhões de dólares (PCGA, 2008).

O processo de criação de jogos é composto de diferentes etapas, sendo que em cada uma é desenvolvida uma parte do mesmo. Um jogo pode ser dividido em duas partes principais, a interface, responsável por apresentar ao usuário todo o gráfico do jogo, personagens, cenários, Non-Playable Characters (NPCs) e músicas, e a parte lógica, que não pode ser visualizada pelo usuário final, mas é responsável por toda a implementação do jogo, como ações, movimentos e pontos de colisão de personagens e do cenário. Nem sempre essas partes são desenvolvidas na mesma ferramenta, o que obriga o desenvolvedor a buscar documentos e instruções de como integrá-las em um único produto final.

(16)

3D Studio Max, Java3D e Blender, ferramenta open source utilizada no desenvolvimento de modelos 3D para cenários virtuais e também jogos. Para a parte lógica, o XNA, que foi lançado a pouco tempo pela Microsoft, é utilizado no desenvolvimento de jogos para XBOX e PC, sendo que com ele é possível trabalhar tanto com a parte gráfica do jogo como com a parte lógica.

Ferramentas existem, porém a falta de documentação que instrua o desenvolvedor no processo de integração das diferentes ferramentas utilizadas no processo de criação de um jogo dificulta a sua utilização.

1.4 Objetivo geral

Desenvolver um jogo para PC utilizando a ferramenta Blender para construção da interface gráfica e o XNA para implementação da lógica do jogo.

1.5 Objetivos específicos

a) Apresentar como o XNA e o Blender devem ser usados para possibilitar a integração da lógica de um jogo com a interface gráfica criada nas respectivas ferramentas;

b) Modelar um jogo de estratégia para PC envolvendo um acontecimento histórico importante na história mundial;

c) Implementar o jogo modelado no item “B”, usando as tecnologias descritas em “A”;

1.6 Metodologia

(17)

Em seguida, utilizando documentos, livros e o conteúdo disponível na Internet sobre o XNA, ferramenta utilizada na elaboração da parte lógica do jogo, foi realizado um estudo sobre esta Game Engine, abordando suas principais classes e métodos. Como resultado destes estudos foi elaborado o Capítulo 2.

Após, foi realizado um estudo sobre os principais acontecimentos históricos da humanidade, fatos importantes, guerras e descobertas, onde um foi escolhido como tema do jogo. O Game Design iniciou nesta etapa do TCC, quando foram escolhidos os personagens, cenários, animações e enredo do jogo desenvolvido. Partindo do estudo citado, o Capítulo 3 foi redigido.

Depois, foi iniciada a implementação e escrita do Capítulo 4. Neste capítulo foi apresentado como os modelos criados no Blender são exportados para DirectX (.x), e utilizados como objetos de classes no XNA. A Lógica do jogo foi desenvolvida utilizando a linguagem .Net C#. O resultado final é um jogo para Windows, com personagens que utilizam algoritmos de busca para executar determinadas ações e proporcionar um certo desafio ao jogador.

(18)

2 BLENDER E XNA

Neste capítulo são apresentados os resultados do estudo da ferramenta Blender e XNA, os personagens criados, cenários, formas de modelagem utilizadas no desenvolvimento dos mesmos, detalhes e dicas de como modelar personagens para jogos no Blender 3D e as principais funcionalidades do XNA.

2.1 Modelagem dos personagens no Blender

Possivelmente, o processo mais complexo e mais gratificante de modelagem em Três Dimensões (3D) é a modelagem de um personagem. Construí-lo do começo ao fim, do rascunho à animação, é um dos pontos máximos de qualquer modelador 3D (TABAJARA, 2006).

A modelagem de personagens para jogos é um processo complexo e trabalhoso, não pela complexidade, mas sim pela simplicidade que os modelos desenvolvidos devem ter. É preciso ter o máximo cuidado para se criar um personagem atrativo, bonito e cheio de detalhes utilizando o mínimo possível de polígonos no modelo, pois isto influencia diretamente no desempenho do jogo.

Para isso, existem diferentes técnicas de modelagem. As principais são a Base Mesh e a Edge-Loops.

(19)

Deve-se tomar cuidado ao utilizar esta técnica, pois o uso somente dela ao invés de gerar um modelo dinâmico, pode gerar um modelo sem possibilidade de se movimentar. Por isso, combinada com esta técnica utiliza-se também a técnica Edge-loops (TABAJARA, 2006).

O Edge-loop é uma técnica de manipulação de malhas de um modelo 3D, também conhecida como técnica de confecção de Personagens Profissionais. Sem o Edge-loops, um personagem serve apenas como estátua, pois qualquer movimento que ele realize, a malha (vertex e edges) se entrelaça, gerando uma tensão que deforma a estrutura do personagem, trazendo má qualidade ao trabalho (TABAJARA1, 2006 apud PEREIRA, 2008).

Utiliza-se também blueprints, imagens de fundo que servem como referência, facilitando a modelagem, para que a mesma fique o mais próximo possível do real, aumentando a fidelidade do modelo com o personagem real. Usando a técnica Edge-loops sobre o blueprint, os pontos de maior flexibilidade da malha terão um movimento mais próximo do real e, também evita-se assim, criar modelos que tenham muitos polígonos triangulares, já que estes possuem um fator menor de realismo quando movimentados, devido ao seu formato.

A Figura 1 apresenta a interface de trabalho do Blender, algumas configurações do programa foram alteradas para facilitar a realização da modelagem. A 3D View foi divida em três, cada parte dela possui um ângulo de visão diferente, a primeira parte à esquerda está configurada com o modo de visão frontal, a parte de superior direita está configurada com o modo de visão lateral, e a parte inferior direita com a visão da câmera em perspectiva. Esta divisão da 3D view permite um controle maior sobre cada vértice adicionada ao modelo.

Na parte superior da interface, acima da 3D view é possível visualizar o menu do Blender, acima do mesmo, oculto, existem as opções de configuração do Blender, que podem ser acessadas arrastando o menu principal para baixo.

(20)

utilizada, no menu aparecerão opções relativas a adição, edição e configuração dos objetos 3D. Se for o vídeo editor no menu aparecerão opções referentes a edição de vídeos. Cada divisão da 3D view possui seu próprio menu individual. Cada opção do Blender possui um atalho próprio, para diminuir o tempo de modelagem e agilizar o acesso as ferramentas necessárias na criação de um modelo.

FIGURA 1 - Modelagem inicial

O Blender pode ser facilmente configurado utilizando-se scripts em Python. A própria ferramenta possui um console que permite ao usuário elaborar e compilar scripts, que também podem ser utilizados em jogos, animações e nas propriedades dos objetos criados.

Depois de configurada a janela principal do software Blender, a modelagem dos personagens pode ser iniciada. O modelo é criado da forma mais simples possível, utilizando um cubo que é alterado conforme a necessidade do jogo. É adicionada uma propriedade ao cubo para que este obtenha um formato mais arrendodado através do modificador SubSurf (Figura 2). Este modificador tem a capacidade de ajustar os

1 TABAJARA, Raul. Edge- Loop: Conceito e prática. 3D Arts - Tutoriais. Disponível em:

(21)

vértices do modelo, suavizando-as através de subdivisões na malha do objeto.

FIGURA 2 - Cubo com o modificador subsurf aplicado.

Após aplicado o modificador, a malha é ajustada para que tenha o formato de um corpo humano. Nesta etapa pode ser utilizada a ajuda de blueprints.

Alguns outros objetos são utilizados para facilitar ainda mais na modelagem, como é o caso de uma esfera para criar a cabeça do modelo, ou de cilindros para a construção das pernas e braços. A ferramenta Sculpt também pode ser útil para criar detalhes no rosto do modelo, mas deve ser utilizada sem o acréscimo de muitas subdivisões para não diminuir o desempenho do jogo.

Depois que os personagens estão prontos, é realizada uma das etapas mais importantes no game design, o que torna o jogo mais vivo e agradável para o usuário.

(22)

FIGURA 3 - Resultado final dos personagens.

2.2 Modelagem dos cenários

Outro aspecto importante de um jogo é o cenário, local onde se passa a história, que também é outro componente que influencia no desempenho do mesmo.

A criação dos cenários é realizada da mesma forma que a dos personagens, através da modelagem livre, apenas editando a malha de um objeto. Uma forma comum de criar cenários é através de um plano, subdividido várias vezes, para recriar paisagens bem próximas da realidade.

(23)

imagem para passar a impressão de um ambiente de guerra.

Os outros cenários são mais detalhados, possuem edifícios, muros, ruas e postes. Por isto é necessário realizar várias extrusões na malha, procedimento que permite duplicar vértices mantendo as mesmas interligadas com os vértices de origens, criando faces automaticamente no modelo.

FIGURA 4 - Cenário do jogo desenvolvido no TCC.

(24)

Assim, objetos como muros, paredes, entre outros, podem ser facilmente criados, o que permite que o cenário fique mais bonito, como pode ser visualizado nas Figuras 4 e 5 respectivamente. Não foram utilizadas ferramentas adicionais neste processo, já que o objetivo é um cenário simples, sendo assim, novamente a etapa de texturização é importante para criar o efeito realista no mesmo.

2.3 XNA

O Microsoft XNA é um Framework líder de mercado, serviços, recursos e comunidade focadas em qualificar desenvolvedores de jogos, tanto para Personal Computer como para XBOX 360 que permite ao desenvolvedor criar uma Game Engine para seus jogos ou utilizar outras já prontas. É o substituto do Managed DirectX (MICROSOFT, 2009).

A Game Engine ou Motor de jogo é um software ou um conjunto de bibliotecas usadas para simplificar o desenvolvimento de jogos com gráficos em tempo real, para vídeo-games ou computador.

Uma Game Engine geralmente é utilizada para renderizar gráficos, manipular personagens, cenários e ambientes do jogo, inteligência artificial, gerência de arquivos e, também, criar toda a lógica, parte responsável pela física, colisão, animação, movimentação dos objetos e demais ações relacionadas aos mesmos.

2.3.1 Recursos

A Microsoft proporciona uma tecnologia avançada que permite aos desenvolvedores profissionais rapidamente criar jogos em plataformas como XBOX 360 e Windows Vista.

O XNA é formado por alguns componentes, como (WORLDOFBIT, 2008):

(25)

pequenos grupos de desenvolvimento, com o intuito de que os usuários criem seus próprios jogos;

XNA Framework: Conjunto de classes necessárias para a execução de jogos no XNA, funciona utilizando o .Net Framework 2.0 no Windows e o .Net Compact Framework no XBOX 360;

XNA Content Pipeline: É um componente de gerência de recursos adicionados ao projeto, como imagems, objetos 3D, sons entre outros dados, como arquivos XML (eXtensible Markup Language). O Content Pipeline cria processos e transforma todos os recursos em arquivos que são lidos em tempo de execução e que são entendidos somente pela aplicação. A flexibilidade destes processos permite que o desenvolvedor elabore uma grande variedade de ferramentas de Conteúdos de Criação Digital (Digital Content Creation - DCC). O XNA Game Studio possui suporte a muitos formatos de ferramentas de DCC e também permite que o mesmo crie suporte a outros formatos;

XACT (Audio Authoring Tool): Ferramenta para desenvolvedores de áudio organizarem seus arquivos de áudio e efeitos sonoros. Oferece suporte apenas a WAV (WAVEform) e AIFF (Audio Interchange File Format).

2.3.2 Principais classes e aspectos relevantes

O XNA possui diversos métodos e classes, cada um com suas próprias funcionalidades, onde se define os recursos que são usados, como são usados, tratamentos de ações, loop principal do jogo, como os objetos são desenhados na tela, os arquivos de áudio, os efeitos sonoros, entre outros.

(26)

QUADRO 1 - Método construtor da Classe Game1 1. public class Game1 : Microsoft.Xna.Framework.Game

2. { 3. GraphicsDeviceManager graphics; 4. SpriteBatch spriteBatch; 5. 6. public Game1() 7. {

8. graphics = new GraphicsDeviceManager(this); 9. Content.RootDirectory = "Content";

10. }

Antes que o jogo seja executado, o método Initialize é chamado, ele permite que o jogo execute qualquer inicialização ou chamada de serviços, e também, carrega qualquer conteúdo não gráfico, enumerando todos os componentes e inicializando os mesmos. No Quadro 2 é apresentado o trecho de código responsável pela realização das tarefas citadas.

QUADRO 2 - Método responsável por inicializar os recursos necessários. 1./// <summary>

2./// Allows the game to perform any initialization it needs to do before

3./// starting to run.

4./// This is where it can query for any required services and load any

5./// non-graphic related content.

6./// Calling base.Initialize will enumerate through any components and

7./// initialize them as well.

8./// </summary>

10. protected override void Initialize() 11. {

12. // TODO: Add your initialization logic here

13.

14. base.Initialize(); 15. }

No Quadro 4 são apresentados os métodos responsáveis por carregar e descarregar os objetos utilizados no jogo, todo o conteúdo utilizado em tempo de execução deve estar neste método, como sons, imagens, efeitos, fontes de textos e personagens (GAMEDEVBR, 2008).

QUADRO 3 - Métodos Load e Unload. 1. /// <summary>

2. /// LoadContent will be called once per game and is the place to load

3. /// all of your content.

4. /// </summary>

(27)

7. // Create a new SpriteBatch, which can be used to draw textures.

8. spriteBatch = new SpriteBatch(GraphicsDevice); 9. // TODO: use this.Content to load your game content here

10. } 11.

12. /// <summary>

13. /// UnloadContent will be called once per game and is the place to

14. /// unload

15. /// all content.

16. /// </summary>

17. protected override void UnloadContent() 18. {

19. // TODO: Unload any non ContentManager content here

20. }

Um dos principais métodos da classe é o Update. Nele toda a lógica do jogo é executada, ambientes são alterados, colisões detectadas, teclas pressionadas são capturadas e o áudio é tocado (GAMEDEVBR, 2008). Este método fica em um loop constante. No trecho de código do Quadro 4 é possível visualizar a captura de um evento do teclado, se alguma tecla foi pressionada, e a ação executada no tratamento do código.

QUADRO 4 - Método Update, o “Motor do Jogo”. 1. /// <summary>

2. /// Allows the game to run logic such as updating the world,

3. /// checking for collisions, gathering input, and playing audio.

4. /// </summary>

5. /// <param name="gameTime">Provides a snapshot of timing values</param>

6. protected override void Update(GameTime gameTime) 7. {

8. // Allows the game to exit

9. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == 10. ButtonState.Pressed)

11. {

12. this.Exit(); 13. }

14.

15. // TODO: Add your update logic here

16.

17. base.Update(gameTime); 18. }

(28)

câmera (GAMEDEVBR, 2008).

Cada vez que este método é chamado, a tela do jogo é atualizada, novos gráficos são gerados, efeitos adicionados ou removidos. O desempenho do jogo é diretamente afetado pelos efeitos adicionados ao mesmo. No trecho de código visto no quadro 6, é definido que a cor de fundo do jogo (background) será azul.

QUADRO 5 - Método Draw, responsável por desenhar os gráficos na tela.

1. /// <summary>

2. /// This is called when the game should draw itself.

3. /// </summary>

4. /// <paramname="gameTime">Provides a snapshot of timing value.</param>

5. protected override void Draw(GameTime gameTime) 6. {

7. GraphicsDevice.Clear(Color.CornflowerBlue); 8. // TODO: Add your drawing code here

9.

10. base.Draw(gameTime); 11. }

2.4 Conclusão

A grande variedade de ferramentas no mercado para o desenvolvimento de jogos atrai cada vez mais desenvolvedores e facilita muito o trabalho dos mesmos. Embora a maioria das ferramentas não possua uma documentação adequada e faça com que o usuário tenha que estudar e aprender com seus erros, a indústria de jogos no Brasil não para de crescer (UOL, 2009).

Com o estudo destas ferramentas, foi possível apresentar de forma simples, o básico do desenvolvimento de jogos no Blender e no XNA, como o desenvolvedor pode começar a projetar seus próprios jogos seguindo as orientações descritas, como utilizar o Blender na modelagem dos personagens e cenários e o XNA na implementação da lógica do jogo.

(29)

características, e formas de utilização, bem como dicas que auxiliam no desenvolvimento do TCC.

(30)

3 GAME DESIGN

Neste capítulo é apresentado o Game Design do jogo, etapa em que são definidos os personagens e ações dos mesmos, cenários, enredo, com base em um acontecimento histórico mundial, sons e características próprias do jogo bem como os requerimentos de hardware.

3.1 Conceitos

Existem várias definições para Game Design, mas em geral, é o que determina a jogabilidade2, as escolhas que o jogador tem no jogo e as ramificações que suas escolhas vão ter no resto do jogo. Ele inclui o que faz o jogador vencer ou perder, como ele vai controlar o jogo e as informações que o jogador deve receber. Em resumo, o game design descreve cada detalhe de como funcionará a jogabilidade, o conteúdo e as regras do jogo (PERUCIA et al, 2007).

O Game Design é uma extensão da prática do design de software, onde o foco é a criação de uma documentação (Game Design Document) para o desenvolvimento de jogos eletrônicos. Ele é dividido em várias etapas englobando áreas como a programação, sonoplastia e computação gráfica.

A criação do Game Design Document permite ao desenvolvedor seguir uma linha de raciocínio que torna o desenvolvimento do jogo mais rápido. Se for preciso alterar algum aspecto do jogo, é possível analisar o documento e estudar a possibilidade de implementação do mesmo com mais facilidade.

2 Termo da indústria eletrônica de jogos que inclui todas as experiências do jogador durante sua interação com os

(31)

As etapas propostas abaixo fazem parte do modelo de Game Design utilizado por Eduardo Azevedo no livro “Desenvolvimento de Jogos 3D e Aplicações em Realidade Virtual” (AZEVEDO, 2005), sendo que este é o modelo adotado para elaboração neste TCC. As principais etapas do Game Design Document são:

 Definição do tipo de jogo;  Escolha do nome;

 Criação do logotipo;  Redação do roteiro;  Criação dos personagens;  Modelagem;

Storyboard;

 Criação dos cenários;  Sons;

 Definição das regras do jogo;  Testes;

 Manual de instruções;  Trailer e abertura.

3.2 Game Design

O jogo desenvolvido neste Trabalho de Conclusão de Curso é baseado na história de um batalhão da segunda guerra mundial, a companhia EASY.

A Companhia EASY participou da invasão dos exércitos americanos e inglês na Normandia, no dia 6 de junho de 1944, o famoso Dia D, além da conhecida Operação Market Garden, operação militar realizada durante a Segunda Guerra Mundial, cujo objetivo era capturar uma série de pontes sobre os principais rios dos Países Baixos ocupado pelos alemães; e da Batalha do Bulgue (WORLDWAR-TWO, 2009).

(32)

Todos os combatentes da companhia eram civis que se alistaram pelo desejo de se tornarem uns melhores que os outros e pelo bônus de $50 doláres. Em combate, a recompensa das tropas pelo bom trabalho era o próximo trabalho. Assim eles avançaram através da Europa, completando todos os objetivos que lhes foram designados (EBOOKMALL, 2009).

Eles saltaram de pára-quedas na França na manhã do Dia D e tiraram de combate uma bateria de quatro canhões de 105 mm que disparava contra a praia de Utah. Saltaram também na Holanda durante a campanha de Arnhem, campanha para capturar pontes sobre o rio Rhino e evitar que os alemães enviassem reforços (BBC, 2009), e apesar de cercados, disparam uma contra-ofensiva contra os mesmos.

Finalmente capturaram o posto de Hitler na Bavaria, um dos principais postos na Berchtesgadem (EBOOKMALL, 2009).

3.2.1 Definição do tipo de jogo

Nesta etapa é definido o estilo do jogo. Ela é, talvez, uma das mais importantes, pois caso se deseje englobar uma grande quantidade de jogadores, é necessário fazer um estudo de mercado e um levantamento sobre os pontos mais atrativos a serem implementados no estilo de jogo escolhido.

Um jogo pode ser classificado como (AZEVEDO, 2005):

RPG (Role Playing Game): Jogos de computador ou vídeo-game que se assemelham ao RPG tradicional, em que o jogador assume o papel de um personagem e contribui para a elaboração de uma história;

 Ação: Gênero de jogos eletrônicos que desafia a velocidade, reflexo e raciocínio rápido do jogador;

First Person Shot (FPS) ou jogo de tiro em primeira pessoa: é um estilo no qual se enxerga apenas o ponto de vista do protagonista, como se o jogador e personagem do jogo fossem o mesmo observador;

 Simulador: tem como objetivo simular o mundo real, um mundo fictício ou ambos;

(33)

solucionar enigmas para seguir com seu curso;

 Esportes: jogos que representam esportes reais, coletivos ou individuais;  Casuais: adaptações dos jogos tradicionais como xadrez, gamão e

paciência;

 Educacionais: jogos cujo objetivo é ensinar enquanto se diverte jogando;  Puzzle: jogos puramente voltados para o desafio intelectual na solução de

problemas;

 Jogos de estratégia: apresentam uma enorme variedade de opções e dados, cabendo ao jogador combinar as opções disponíveis para obter o melhor resultado, ou o objetivo estipulado para cada partida. O jogador pode tanto administrar uma situação já existente, como criar e gerenciar outras a partir de problemas derivados da mesma.

O estilo adotado no jogo desenvolvido neste TCC é estratégia, o que permitirá que o jogador tenha mais opções e crie caminhos diferentes. Este estilo se encaixa melhor na temática escolhida para o jogo e exige mais concentração do usuário.

3.2.2 Escolha do nome

Ao contrário do que se parece, criar o nome de um jogo é uma tarefa complicada. Deve-se evitar a obviedade, atentar para a originalidade e sonoridade, pois o reconhecimento de uma identidade do jogo pode se iniciar pelo nome. A força comunicacional passada pelo nome do jogo reforça as expectativas do usuário para com o mesmo, expressando uma emoção subjetiva muito maior do que a possibilidade fictícia de um nome comum (AZEVEDO, 2005).

(34)

3.2.3 Criação do logotipo

O logotipo “é a representação visual de uma empresa, evento ou empreendimento. Constitui-se do design de seu sinal principal, marca ou símbolo, a organização dos seus componentes como padrões tipográficos, cromáticos, associações, assinaturas, amostras de cores, ou arquivos digitais dos sinais gráficos e aplicações especificas” (DIVICENZO DESIGN, 2009).

Após o estudo sobre logotipos, foi desenvolvida a representação gráfica do título do jogo (Figura 6), em que é apresentado o nome do mesmo e o tema principal. Esta representação gráfica passa a fortalecer a imagem do jogo enquanto marca juntamente com seus derivados, proporcionando uma identidade ao produto (AZEVEDO, 2005).

FIGURA 6 - Logotipo desenvolvido para o jogo.

(35)

3.2.4 Roteiro

O jogo é baseado na 2ª Guerra Mundial, mais precisamente na história da Companhia E (Easy Company) do 506º Regimento de Infantaria Pára-quedista do Exército Americano, 101ª Divisão Aerotransportada e os fatos que aconteceram na sua campanha (EBOOKMALL, 2009).

No início do jogo é apresentado o trailer, vídeo que tem como objetivo realizar uma introdução ao tema do jogo com algumas imagens reais da invasão da praia da Normandia. Nesta etapa uma frase do escritor americano Ernest Hemingway presente no vídeo merece destaque: “Havia navios de desembarque avançando pelo mar cinzento até onde os olhos podiam alcançar. O sol estava coberto e a fumaça soprava por todo o litoral.”

O jogo possui três etapas principais, cada uma delas correspondente a uma batalha real que ocorreu durante a guerra e influenciou na tomada da praia, necessárias para que o jogador conclua o jogo. A primeira é a Batalha de UTAH, os quatro personagens enfrentam uma baixa resistência dos inimigos nessa batalha. É a fase que possui a menor dificuldade entre as três. Ao vencer esta batalha, ela estará indisponível e a bandeira dos Aliados estará no local da bandeira dos Alemães. É apresentado um pequeno texto na tela com dados da batalha ocorrida na vida real.

A segunda batalha é a de OMAHA, que apresenta uma dificuldade moderada. A vida dos quatro personagens é renovada no início da luta onde enfrentam cinco inimigos. Ao vencer, novamente um pequeno texto é apresentado ao jogador, com os dados da batalha ocorrida na vida real, como já foi citado.

(36)

3.2.5 Criação dos personagens

O game designer deve pensar na criação dos personagens com características psicológicas bem delimitadas de forma a construir um ambiente experimental em que o jogador acredite momentaneamente estar em diálogo ou imerso efetivamente no personagem. Expressões faciais, diálogos, vestimentas e a movimentação dos personagens devem ser desenvolvidos com base em peculiaridades para a formação das identidades dos personagens (AZEVEDO, 2005).

Os personagens principais possuem características, sons, habilidades e vestimentas próprias, o que os difere dos demais personagens que não apresentam grande importância no jogo, e podem ser considerados como personagens planos, segundo a classificação de Segolin (1978).

Este autor classifica os personagens presentes em uma narrativa em dois grupos: personagens planos e redondos. Personagens planos são aqueles que não interferem de maneira incisiva na narrativa, eles são lineares e definidos por um único traço, imutável ao longo da obra toda. Os personagens redondos detêm maior significância dentro da narrativa, são entidades complexas, multifacetadas, imagens do homem.

Todos os dados sobre os personagens, desta seção em diante foram retirados de WIKIPEDIA (2009).

A Figura 7 representa Lewis Nixon, oficial do Exército dos Estados Unidos, engajado na Companhia Easy, 2º Batalhão, 506º Regimento de Infantaria Para-quedista, 101ª Divisão Aerotransportadora.

Filho dos donos da empresa Nixon Nitration, teve problemas com alcoolismo durante a guerra, após a qual conseguiu livrar-se do vício. Durante este período seus atos eram questionados em diversos momentos, mas sempre cumpriu suas ordens.

(37)

FIGURA 7 - Lewis Nixon

Em 6 de julho de 1944, o avião que carregava a equipe de pára-quedistas número 66 e o quartel-general da Companhia Easy foi abatido pela bateria antiaérea alemã, matando todos a borda na aeronave. Desconhecendo o destino dos outros integrantes da companhia, Winters assumiu o comando da mesma. Ele permaneceu como comandante da Companhia Easy durante toda a Batalha da Normandia.

FIGURA 8 - Richard Winters

(38)

mínimo requerido era 17.

Em 1942 Guarnere foi convocado para fazer parte da Companhia Easy, e permaneceu na mesma até perder sua perna tentando ajudar um companheiro na Batalha do Bulgue, no mesmo ano.

FIGURA 9 - Wild Guarnere

A Figura 10 representa Herbert M. Sobel (26/01/1912-30/09/1987), capitão do Exército dos Estados Unidos durante a Segunda Guerra Mundial. Foi o primeiro comandante executivo da Companhia Easy.

FIGURA 10 - Herbert Sobel

(39)

seguirem-no em batalha, sendo que os homens possuíam mais confiança em Richard Winters ao invés do comandante. Toda esta tensão acaba por culminar em uma acusação de Sobel a Richard sobre um suposto não cumprimento de ordens. Nessa situação os Oficiais da companhia, em um ato de motim informam que não desejam mais servir. Como resultado, Sobel é retirado do dever pelo conselho de guerra.

3.2.6 Modelagem

Após a criação dos personagens, enredo, características do jogo, concepção de algumas artworks, imagens com cenas do jogo, enfatizando qualidades do mesmo ou apenas mostrando algumas partes do mesmo, é feita a modelagem dos objetos, personagens e composição do cenário. Esta atividade foi realizada utilizando o Blender e seguindo os passos descritos no Capítulo 2 deste TCC (Figura 11).

Na modelagem é de fundamental importância manter a atenção na iluminação que incide sobre os personagens, bem como as sombras resultantes da luz incidente sobre os objetos. O jogo é percebido por meio de uma tela, que utiliza a luz para transmitir a sensação de tridimensionalidade passando ao consumidor a ilusão de profundidade no cenário virtual. O cuidado com a modelagem das formas deve ser redobrado para que o usuário se sinta inserido no ambiente (AZEVEDO, 2005).

Segundo Gomes3 apud Azevedo (2005), a forma pode ser definida como a figura ou a imagem visível do conteúdo. A forma apresenta a natureza da aparência externa do objeto. Tudo o que se vê possui forma. A percepção da forma é o resultado de uma interação entre o objeto físico e o meio de luz agindo como transmissor de informação, condições e as imagens que prevalecem no sistema nervoso do observador, que é em parte determinada pela própria experiência visual. Para se perceber uma forma, é necessário que existam variações, ou seja, diferenças no campo visual. As diferenças acontecem por variações dos estímulos visuais, em função de contrastes que podem ser diferentes e dos elementos que configuram determinado objeto ou coisa.

(40)

FIGURA 11 - Personagens do jogo

3.2.7 Storyboard

É uma seqüência de imagens, parecida com uma história em quadrinhos, mas sem diálogos, que representa os pontos chave do roteiro, acontecimentos do jogo e a ação dos personagens, permitindo uma visualização mais ampla do resultado final do jogo.

(41)

Na figura 12 é apresentado o storyboard que representa uma batalha, os passos para chegar até a mesma e o que acontecerá se o jogador vencer.

FIGURA 12 - StoryBoard do jogo desenvolvido no TCC

3.2.8 Criação de cenários

O cenário de um jogo não é percebido diretamente pelo jogador, uma vez que sua atenção esta voltada às ações dos personagens. A sensação do jogo é produto de fatores objetivos e subjetivos, ou seja, o enredo, a história dos personagens e a jogabilidade são os fatores que mais chamam atenção dos jogadores, mas existem elementos secundários que ressaltam esses fatores e são essenciais aos jogos sem que os usuários percebam.

(42)

(AZEVEDO, 2005).

Todos os cenários criados para o jogo são baseados na praia de Normandia e pontos específicos, em que os ataques mais relevantes da batalha aconteceram.

3.2.9 Sons

Outro aspecto importante de um jogo é a ambientação sonora. Os recursos de áudio permitem que o jogo seja mais real, tornando a experiência de jogá-lo muito mais valiosa e emocionante. É importante valorizar o momento da produção sonora, pois os sons ao mesmo tempo em que incrementam, também podem atrapalhar e até mesmo desestimular o jogador, caso não estejam em perfeita harmonia com a proposta do jogo (PERÚCIA et al, 2005).

Altura, base e profundidade determinam as três dimensões de jogos e animações. Embora a quarta dimensão seja atribuída por muitos teóricos ao fator tempo, alguns produtores de softwares para o cinema consideram o som a quarta dimensão de uma animação. Esta definição pode ser caracterizada através do som que um veículo produz em um jogo, quando está próximo da posição do jogador o volume é mais alto, e ao se distanciar, o volume se torna mais baixo, o que transmite uma sensação de profundidade.

Após analisar o estilo de jogo e o tempo em que o mesmo se passa, foram escolhidas músicas de bandas antigas de rock para fazer parte da trilha sonora, há uma grande diversidade de efeitos sonoros escolhidos, partindo de passos, tiros, explosões até o barulho de água e vento.

As músicas presentes no jogo são:  We are one – Kiss;

 Hold me back – AC/DC;  Storm May Day – AC/DC;  Highway star – Deep Purple;

 Can I play with madness – Iron Maiden;  Bird is the word – Dr. Demento;

(43)

 Should I stay or go now – The Clash;  Born to be wild – Steppenwolf;  Kung fu fighting – Carl Douglas 3.2.10 Definição das regras de jogo

As regras de jogo definem o que o usuário pode ou não fazer, onde ele pode se locomover, quem ele pode atacar, quando ele pode atacar e os comandos que podem ser utilizados no jogo para que o mesmo seja facilmente compreendido, criando limites para o jogador e obstáculos que aumentem a dificuldade do jogo.

Algumas regras criadas para o jogo são:

 Limite de movimentos: Cada personagem possui uma distância limite de movimentação em cada turno e o mesmo só pode ser movimentado uma vez por turno;

 Cada batalha possui um nível de dificuldade, a primeira é a mais fácil e a terceira a mais difícil;

 Cada personagem possui uma quantia de vida, e ao final da mesma o personagem morre;

 Se o personagem morrer em uma batalha ele só poderá ser utilizado na próxima;

 A quantidade de vida que o personagem possui é completada no final de cada batalha;

 Não é possível salvar o jogo e continuar de onde parou;

 O jogo só termina quando o jogador vencer as três batalhas propostas, que são UTAH, OMAHA e JUNO.

3.2.11 Testes

(44)

respeito, já que as empresas de desenvolvimento de jogos raramente publicam seus padrões de projetos, etapas e formas de elaboração, serão realizados apenas testes básicos, para analisar situações comuns a todos os jogadores e o comportamento do jogo.

As etapas seguidas para testes não seguem um padrão nem possuem uma ordem obrigatória já que o jogo desenvolvido é relativamente pequeno e não exige um plano complexo de teste.

Os testes realizados abordam verificações de consumo de memória, processamento, disco, análise e funcionamento dos menus do jogo, movimentação dos personagens, ataques, quantidade de vida do personagem, balanceamento, etapa responsável por incrementar a dificuldade do jogo, ataque dos personagens, vida, alcance dos ataques e movimentos, e por fim, o layout do jogo, posição dos menus, ícones e imagens.

3.2.12 Manual de instruções

O manual de instruções é responsável por conter todos os requisitos do sistema, bem como os controles do jogo, dicas e algumas imagens caso seja necessário.

Inicialmente o jogo será desenvolvido para rodar em uma máquina com os seguintes requisitos mínimos:

 Processador Dual Core 1.8 Ghz ou Athlon correspondente;  Memória RAM: 1024 Mb;

 Espaço em disco de 1 Gb;

 Placa de vídeo GeForce 5X Séries ou superior ou NVidia correspondente;

(45)

3.2.13 Trailer de abertura

Para o trailer do jogo foram escolhidas imagens reais (Figura 13), da abertura da série Band of Brothers, exibida pela BBC em 2005. O vídeo retrata brevemente a vida dos combatentes da Compania Easy, que inspirou o desenvolvimento deste TCC.

FIGURA 13 - Trailer de introdução do jogo.

(46)

3.3 Conclusão

O projeto de um jogo envolve de 10 a 50 profissionais em média. Em projetos maiores esse número pode chegar à casa de 200 envolvidos, o que mostra a importância desta fase no desenvolvimento de um jogo (AZEVEDO, 2005).

(47)

4 IMPLEMENTAÇÃO E APRESENTAÇÃO DO SISTEMA

Neste capítulo são apresentadas a implementação do jogo, formas de desenvolvimento, etapas e cuidados que precisam ser seguidos durante a programação, bem como alguns trechos de código das classes mais importantes.

4.1 Importação dos modelos criados no Blender

Com os personagens modelados e texturizados no Blender, é preciso exportá-los para um formato comum ao XNA, que é DirectX (.x) ou AutoDesk (.fbx) para que seja possível visualizá-los. Este processo é relativamente simples, e devido à grande facilidade existente na criação dos personagens no Blender o tempo de produção de um jogo pode ser reduzido sensivelmente.

O primeiro passo no Blender é ter certeza que está no modo de objetos Object mode (Figura 14), este modo permite a seleção e manipulação completa dos objetos que foram criados, e não de seus vértices, isto é necessário porque o script de importação funciona somente com os objetos selecionados.

FIGURA 14 - Object mode

(48)

futuras nos arquivos criados, é preciso selecionar o objeto a ser exportado. O objeto selecionado ficará destacado dos demais com um contorno claro ao seu redor. Após é preciso selecionar o menu File na parte superior da interface, expandir o item Export e clicar na opção DirectX (.x) conforme a Figura 15.

FIGURA 15 - Menu do Blender para exportação do modelo selecionado para o formato

DirectX, compatível com o XNA.

(49)

FIGURA 16 - Menu gerado pelo script de exportação do DirectX.

No segundo grupo de botões do menu é possível exportar todos os objetos da cena, incluindo a câmera e as lâmpadas, somente o objeto selecionado, ou sair do menu, respectivamente.

O terceiro grupo de botões permite alterar algumas configurações dos objetos a serem exportados, como manter o objeto idêntico ao criado no Blender, recalcular suas faces para verificar se não estão invertidas ou remover a suavização das vértices, obtida através da propriedade Smoth durante a criação dos modelos, respectivamente.

Ao clicar em Export Sel aparecerá a janela de arquivos, solicitando um local para salvar o objeto a ser exportado. Com isso, o uso do Blender é encerrado. Todas as etapas seguintes serão realizadas no XNA e o tratamento dos objetos exportados será realizado através de códigos.

No XNA, o arquivo gerado anteriormente será importado para a pasta Content, esta é a pasta padrão do XNA para armazenamento dos arquivos de imagem, som, vídeo e demais arquivos necessários para a execução do jogo.

(50)

selecionar a opção Add, subitem existing item. Após é necessário selecionar o objeto e clicar em abrir. O modelo importado no XNA será copiado para a pasta Content que pode ser encontrada na pasta de arquivos da solução criada no XNA (Figura 17). Se o modelo possuía uma textura, é preciso adicionar a imagem à pasta Content seguindo os mesmos passos descritos durante a importação do modelo.

FIGURA 17 - Solution Explorer do XNA, em destaque a pasta Content, o modelo importado

e sua textura.

A incorporação do modelo ao jogo é relativamente simples e exige poucas linhas de código. Primeiro, ao se trabalhar com um objeto 3D é preciso saber que a orientação espacial dele é muito diferente da orientação de um objeto 2D. A diferença está no eixo Z, que determina a profundidade do modelo na tela do jogo e inclusão de uma câmera, que determina a posição do jogo que o jogador pode visualizar.

É preciso declarar alguns objetos na classe principal do jogo, como pode ser visto no Quadro 6, que por padrão possui o nome de “Game1”.

QUADRO 6 - Declaração de objetos 1. /// <summary>

2. /// This is the main type for your game

3. /// </summary>

4. public class Game1 : Microsoft.Xna.Framework.Game

5. {

6. GraphicsDeviceManager graphics; 7. ContentManager content;

8. Vector3 modelPosition = Vector3.Zero;

(51)

10. Matrix projectionMatrix; 11. Matrix viewMatrix;

12. Model myModel; 13. float aspectRatio;

O objeto GraphicsDeviceManager é o responsável pelas configurações do adaptador de vídeo, como já foi citado anteriormente, o ContentManager é responsável pelo gerenciamento da pasta Content e dos arquivos presentes na mesma. O objeto modelPosition, do tipo Vector3, é o responsável por armazenar a posição do modelo no jogo, é um array com 3 posições armazenando os eixos X,Y e Z.

A variável cameraPosition armazena a posição da câmera no jogo, como se fosse a “visão” do jogador. Os objetos Matrix declarados são responsáveis por armazenar a posição de cada vértice de um modelo ou a posição do mesmo no jogo, como se fosse um conjunto de Vector3, bem como criar visões e atributos especiais para a câmera. Model é objeto que recebe o modelo importado e suas propriedades.

É preciso inicializar algumas variáveis com alguns valores, no caso as duas Matrix criadas, que implementarão dois métodos, um definindo a forma de visão como perspectiva e a outra mostrando a câmera onde ela apontar (Quadro 7).

QUADRO 7 - Método Initialize e a inicialização dos objetos declarados.

1. protected override void Initialize()

2. {

3. // TODO: Add your initialization logic here

4. projectionMatrix = Matrix.CreatePerspectiveFieldOfView( 5. MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 200.0f); 6.

7. viewMatrix = Matrix.CreateLookAt(cameraPosition, 8. Vector3.Zero, Vector3.Up);

9. base.Initialize(); 10. }

(52)

QUADRO 8 - Populando o objeto myModel do tipo Model.

1. protected override void LoadContent()

2. {

3. if (loadAllContent) 4. {

5. // TODO: Load any ResourceManagementMode.Automatic

6. myModel = content.Load<Model>(@"Content\ModeloBlender"); 7. }

8. loadAllContent = false; 9.

10. // TODO: Load any ResourceManagementMode.Manual content

11. }

No método Draw, todos os objetos são desenhados na tela. É importante destacar a estrutura de repetição na linha 8, que busca por outros objetos dentro da variável myModel. Isto só é necessário se o modelo exportado for composto de mais de um objeto 3D, neste caso, a estrutura percorre todos os modelos presentes dentro do mesmo, aplica os atributos e efeitos (linha 10), bem como a posição da câmera e a posição do objeto em relação mesma (linhas15 e 16), como pode ser visto no Quadro 9, e desenha o modelo na tela, através da propriedade mesh.Draw() (linha 18).

QUADRO 9 - O método Draw e as propriedades necessárias para desenhar um objeto 3D no XNA

1. protected override void Draw(GameTime gameTime)

2. {

3. graphics.GraphicsDevice.Clear(Color.CornflowerBlue); 4.

5. Matrix[] transforms = new Matrix[myModel.Bones.Count]; 6. myModel.CopyAbsoluteBoneTransformsTo(transforms); 7.

8. foreach (ModelMesh mesh in myModel.Meshes) 9. {

10. foreach (BasicEffect effect in mesh.Effects) 11. {

12. effect.EnableDefaultLighting();

13. effect.World = transforms[mesh.ParentBone.Index] * 14. Matrix.CreateTranslation(modelPosition); 15. effect.View = this.viewMatrix;

16. effect.Projection = this.projectionMatrix; 17. }

18. mesh.Draw(); 19. }

20. base.Draw(gameTime); 21. }

(53)

4.2 Implementação da lógica de jogo

Nesta etapa o jogo em si é programado, a game engine é criada, as classes responsáveis pelo carregamento dos vídeos, menus, movimentação, vida, ataque e demais atributos dos personagens, bem como os métodos e eventos responsáveis por cada ação executada pelo jogador.

A primeira etapa na implementação do jogo deste TCC foi a elaboração de um controle para que o sistema identifique quais objetos devem ser carregados na memória, quais imagens deverão ser desenhadas, sons tocados e funções de teclas verificadas. Para realizar o controle desta tarefa, os desenvolvedores utilizam uma variável global que tem seu valor incrementado a cada nova etapa do jogo. No jogo desenvolvido neste TCC, o nome da variável criada é gameState. Seu valor inicial é 0, quando o vídeo de introdução termina de ser executado, seu valor é incrementado para 1, assim, quando o laço principal do jogo atingir o novamente o método Update, e o valor do gameState, tiver sido alterado, o método LoadContent respectivo ao atual gameState será chamado, atualizando o jogo.

No Quadro 10 é possível visualizar a variável gameState.

QUADRO 10 - Declaração da variável gameState. 1. public class GameMain : Microsoft.Xna.Framework.Game

2. {

3. int gameState = 0;

(54)

QUADRO 11 - Utilização do gameState

1. protected override void LoadContent()

2. {

3. if (gameState == 0) 4. {

5. videoplayer = new VideoPlayer();

6. videoMenu = Content.Load<Video>("Videos/Meu Filme"); 7. videoplayer.Play(videoMenu); 8. 9. } 10 else 11. if (gameState == 1) 12. { 13. UnloadContent();

14. font = Content.Load<SpriteFont>("Sprites/MenuFont"); 15. }

QUADRO 12 - Utilização do gameState no método Update

1. protected override void Update(GameTime gameTime)

2. {

3. if (this.gameState == 0)

4. {

5. if (currentKeyState.IsKeyDown(Keys.Enter)) 6. {

7. this.gameState = 1; 8. }

9. }

A execução de vídeos no XNA é uma propriedade nova, disponível apenas a partir da versão 3.1. Nas versões antigas era necessário buscar por projetos criados por colaboradores da comunidade e importá-los no jogo a ser desenvolvido, o que muitas vezes trazia problemas de compatibilidade, problemas de execução e consumo exagerado de memória.

Na última versão, o XNA incorporou à sua plataforma a possibilidade do uso de vídeos em jogos. Esta tarefa é realizada através do objeto VideoPlayer, que permite ao usuário, executar, pausar, resumir e parar a execução de um vídeo. Também é possível controlar o volume, a posição do vídeo, e obter dados sobre as propriedades do mesmo, como velocidade, tempo total e estado.

O único problema é a compatibilidade limitada com os diferentes formatos de vídeos. Até o desenvolvimento deste TCC o único formato aceito é o Windows Media Video (WMV) (MICROSOFT, 2009).

(55)

projeto, dentro da pasta “Content”, e uma chamada do método Play(), da classe VideoPlayer, que recebe como parâmetro a classe interna Video previamente inicializada (Quadro 13).

QUADRO 13 - Inicialização dos objetos responsáveis pela apresentação de um vídeo no XNA.

1. protected override void LoadContent()

2. {

3. videoPlayer = new VideoPlayer();

4. video = Content.Load<Video>("Videos/video1"); 5. videoPlayer.Play(video);

6. }

Após os vídeos serem carregados, é necessário desenhá-los na tela (Quadro 14). Isto é realizado no método Draw, através da função GetTexture(). Esta função é um método da classe VideoPlayer e permite que o usuário capture o frame que está sendo exibido em determinado momento do vídeo e o aplique sobre um objeto Texture2D (linha 3), que será renderizado através da Classe SpriteBatch (linha 4).

QUADRO 14 - Trecho de código responsável por renderizar o vídeo na tela do jogo.

1. Texture2D texVideo = new Texture2D(graphics.GraphicsDevice, 280, 2. 230);

3. texVideo = videoplayer.GetTexture();

4. spriteBatch.Draw(texVideo, new Rectangle(270, 50, 280, 230), 5. Color.White);

Desta forma, qualquer vídeo com formato WMV pode ser utilizado no XNA, porém deve ser levado em conta o consumo de memória. O método UnloadContent do XNA é chamado a cada fim do laço principal do jogo, nele devem ser implementadas funções para a limpeza da memória e remoção dos objetos criados. Cada objeto criado possui uma propriedade chamada Dispose, que limpa os dados carregados no objeto e torna seu valor nulo, removendo assim, objetos que não estão mais em uso da memória e diminuindo o custo de processamento e os requisitos finais de hardware do jogo.

(56)

“iniciar”, permite ao jogador escolher uma das batalhas que ocorreram na invasão da Praia da Normandia, se a mesma estiver habilitada. E o último menu, que possui opções relativas aos personagens, como movimentar, atacar e parar.

A classe CreateMenu presente foi implementada de forma dinâmica, para que, caso seja necessário, seus valores possam ser facilmente alterados e novos itens adicionados sem que grandes mudanças necessitem ser feitas.

A chamada desta classe será realizada pela classe principal do jogo, onde alguns parâmetros serão passados para definir a fonte, cor e estilo do texto a ser criado, imagens presentes na tela, bem como o vídeo que será apresentado ao jogador (Quadro 15).

QUADRO 15 - Chamada da classe CreateMenu

1. if (gameState == 2)

2. {

3. if (this.videoplayer == null) 4. {

5. UnloadContent();

6. creatMenu = new CreateMenu(Color.DarkGreen, 7. Color.White,

8. Content.Load<SpriteFont>("Sprites/MenuFont"), 9. Content.Load<Texture2D>("Sprites/setaMenu"), 10. Content.Load<Texture2D>("Sprites/BackVideo"), 11. Content.Load<Texture2D>("Sprites/MenuBackImage3")); 12. videoplayer = new VideoPlayer();

13. videoMenu = Content.Load<Video>("Videos/Meu Filme"); 14. videoplayer.Play(videoMenu);

15. } 16. }

Inicialmente, algumas variáveis precisam ser declaradas, conforme pode ser visto no Quadro 16.

QUADRO 16 - Declaração das variáveis do menu principal do jogo.

1. class CreateMenu

2. {

3. //menu

4. private static int maxItens = 3; 5. private int curMenuItem;

(57)

A variável maxItens define a quantidade máxima de itens que o menu contém, ela é necessária para determinar o tamanho dos arrays que armazenam os itens do menu. A varíavel curMenuItem representa o valor do item selecionado. O array menuItens recebe o nome de cada item e o array pos recebe a posição nos planos “X e Y” dos item definidos. As variáveis do tipo color, selected e unselected definem as cores dos itens selecionados ou não, respectivamente. O objeto font, do tipo SpriteFont define o tipo da fonte dos itens do menu.

Os valores de cada variável são atribuídos no método construtor da classe CreateMenu, conforme o Quadro 17.

QUADRO 17 - Método construtor da classe CreateMenu e a inicialização das variáveis.

1. public CreateMenu()

2. {

3. font = Content.Load<SpriteFont>("Fontes/Arial"); 4. menuItens = new string[MAX];

5. pos = new Vector2[MAX];

6. unselected = Color.DarkGreen; 7. selected = Color.White;

8. menuItemCount = 0; 9. curMenuItem = 0; 10.

11. AddMenuItem("INICIAR", new Vector2(420, 380)); 12. AddMenuItem("SOBRE", new Vector2(420, 440)); 13. AddMenuItem("SAIR", new Vector2(420, 500)); 14. }

Nas linhas 11, 12 e 13 é realizada a chamada de um método que adiciona os itens no array menuItens e define suas posições na tela. Na classe CreateMenu é criado um método Draw (Quadro 18), idêntico ao existente na classe principal do jogo.

QUADRO 18 - Método Draw, responsável por desenhar os itens do menu na tela do jogo.

1. public void Draw(SpriteBatch spriteBatch)

2. {

3. spriteBatch.DrawString(font, menuItems[x], p, selected, 4. 0.0f, new Vector2(0, 0), (float)scale[x],

5. SpriteEffects.None, 0); 6. }

Referências

Documentos relacionados

Uma vez que nossa Role ADMINISTRADOR já foi criada e recebeu privilégios para os objetos do banco de dados, é hora de associarmos nossos usuários a ela, notem como é muito

13.7.1 Não serão aceitos como documentos de identidade: certidões de nascimento, CPF, títulos eleitorais, carteiras de motorista (modelo antigo), carteiras de estudante,

Uma agrofloresta foi implantada tendo espécies arbóreas frutíferas e florestais, plantas de cobertura, espécies adubadeiras, culturas anuais e como espécie-chave

Em um único afloramento da bacia de Lima Campos foram encontrados três dentes de tu- barão hibodontídeo identificados como Planohybodus sp., além de grande número de escamas

Se os personagens não intervierem com DuBois, provavelmente irão direto ver Karin, que se encontra em companhia de Alfred: ela acaba de se levantar, e Lucille está preparando seus

- O risco de progressão da doença entre indivíduos assintomáticos e sem tratamento não é uniforme. - A probabilidade de um indivíduo transmitir o vírus por via sexual é

• Os resultados indicaram efeitos significativos para a redução da população de psilídeos de cerca de 26x para a aplicação com inseticidas em relação àquelas parcelas

Esse programa foi projetado tanto para o iniciante que nunca gerenciou um projeto de forma estruturada, como para gerentes de projetos com alguma experiência e que querem se