SlideShare uma empresa Scribd logo
1 de 30
Nelson Correia, Sapo
        ncorreia@ncorreia.name
http://weblogs.pontonetpt.com/ncorreia
iFactor; Shuggy
Os jogos actuais são bastante complexos

 Fazer um jogo está apenas ao alcance
  de grandes (€€€) equipas
 Produtores de jogos dificilmente aceitam
  novas ideias. Os jogos actuais são
  essencialmente:
    › Sequelas de outros
    › Adaptações de filmes ou séries de TV


                                             Nelson Correia
Abstrai o programador dos detalhes da

    arquitectura
    Permite o foco na lógica do jogo


    Permite a qualquer pessoa com paixão

    por jogos e noções básicas de
    programação o desenvolvimento de um
    jogo


                                       Nelson Correia
Arquitectura

 Content pipeline
 Componentes do Jogo
    › Modelo Aplicacional, Gráficos, Input, Áudio,
     Math e Armazenamento de Dados
    Demos





                                           Nelson Correia
XNA Game Studio
     Express


  XNA Framework




                  Nelson Correia
Starterkits         Code           Content
  Games                                                         Components




  Extended
                   Application Model                  Content Pipeline
  Framework



  Core
                                Audio       Input       Math     Storage
                 Graphics
  Framework



                 Direct3D            XACT           XInput      XContent
  Platform



Legenda: XNA Provides       You Provide     Community

                                                                   Nelson Correia
O que é?

    › Pipeline de processamento de conteúdos


    Objectivos

    › Permitir a utilização de qualquer ferramenta DCC
    › Separar o motor do jogo da dependência de conteúdos
    › Criar um sistema simples e unificado de produção de
      conteúdos




                                                     Nelson Correia
Content Pipeline (design time)


Recurso no
                                     Content          Content             Recurso
                     Importer
 formato
                                    Processor         Compiler           compilado
                      Importer
 original




                                 Formatos/Modelos
                                    Intermédios

Legenda:
                     Engine      Advanced          XNA        Game
     DCC Vendors
                   Developers     Engines       Framework   Developers



                                                                         Nelson Correia
Game runtime


                                Content           Game
            Recurso
                                Loader
           compilado                              Objects




Legenda:
                    Engine      Advanced         XNA          Game
   DCC Vendors
                  Developers     Engines      Framework     Developers



                                                                         Nelson Correia
XNA                         MyGame

               Initialize

        LoadGraphicsContent


Game           Update
Loop            Draw



        UnloadGraphicsContent

                                   Nelson Correia
partial class MyGame : Microsoft.Xna.Framework.Game
{
  public MyGame() {
    graphics = new GraphicsDeviceManager(this);
    content = new ContentManager(Services);
  }

    protected override void Initialize() { ... }

    protected override void LoadGraphicsContent(bool loadAllContent) { ... }

    protected override void UnloadGraphicsContent(bool unloadAllContent) { ... }

    protected override void Update(GameTime gameTime) { ... }

    protected override void Draw(GameTime gameTime) { ... }
}

                                                                  Nelson Correia
<<interface>>    <<interface>>     <<interface>>
 IDisposable      IUpdateable    IGameComponent




                                    IDrawable
                GameComponent
                                   <<interface>>




                   Drawable
                GameComponent




                                                   Nelson Correia
class Background : DrawableGameComponent
{
  protected override void LoadGraphicsContent(bool loadAllContent)
  {
    texture = content.Load<Texture2D>(@quot;ContentTexturesstarsquot;);
  }

    protected override void Draw(GameTime gameTime)
    {
      spriteBatch.Begin();
      spriteBatch.Draw(texture, GetTitleSafeArea(100), Color.White);
      spriteBatch.End();
    }
    // …
}



                                                                  Nelson Correia
Draw,
            Update, …   GameScreen
Game
                         Manager

                              Draw,
                              Update, …

   Screen Collection


       Loading
                 Main Game
        Screen             Highscore
                  Screen             Game Over
                            Screen
                                       Screen  …




                                              Nelson Correia
Criação de recursos áudio com o XACT

    (Microsoft Cross-Platform Audio Creation Tool)




                                         Nelson Correia
O que é?

    › Ferramenta GUI para produção de conteúdos
    › API responsável por interpretar ficheiros XACT e
     reproduzi-los em resposta a eventos do jogo
    Todos os conteúdos áudio têm que estar

    neste formato



                                            Nelson Correia
WAV Files


             XACT GUI Tool
      .wav




                 .xap
                  File

                             XNA Content Files
                             .xgs
                               .xwb
               Content
                                .xsb
               Pipeline


                                       Nelson Correia
public class MyGame : Microsoft.Xna.Framework.Game
{
  protected override void Initialize() {
     audioEngine = new AudioEngine( quot;TestSounds.xgsquot; );
     waveBank = new WaveBank( audioEngine, quot;TestWaveBank.xwbquot; );
     soundBank = new SoundBank( audioEngine, quot;TestSoundBank.xsbquot; );

      soundBank.PlayCue( “StartSoundquot; );
    }
    protected override void Update( GameTime gameTime )
    {
       audioEngine.Update();
    }

    // …
}


                                                          Nelson Correia
Digital        Analog        Vibration     Supported on     Supported on     Number Allowed on
Input Device   Buttons        Controls        Effects        Windows          Xbox 360           System
 Xbox 360
 Controller           14                 4           Yes              Yes              Yes                     4
 Keyboard          > 100                 0           No               Yes              Yes                     1
  Mouse                   5              3           No               Yes              No                      1




                                                                                              Nelson Correia
Ver estado em cada update

 Actualizar de acordo com o input em
  cada momento
 Possível utilização de reconhecimento
  de voz em jogos para o Windows




                                   Nelson Correia
Exemplo
      

void UpdateInputPlayerOne()
{
  GamePadState currentState = GamePad.GetState(PlayerIndex.One);

    // Process input only if connected and button A is pressed.
    if (currentState.IsConnected && currentState.Buttons.A ==
          ButtonState.Pressed)
    {
       vibrationAmount = MathHelper.Clamp(vibrationAmount + 0.05f, 0.0f, 1.0f);
       GamePad.SetVibration(PlayerIndex.One, vibrationAmount,
           vibrationAmount);
    }
}


                                                                   Nelson Correia
Uma das componentes mais poderosas

  da Framework
 Fornece tipos e operações para
  manipulação de vectores e matrizes
 Operações para:
    › Verificação de intersecções entre figuras
      geométricas
    › Rotação e translacção da câmara
    › Etc.
                                           Nelson Correia
Existem duas localizações:

    › Title (game) storage – Executável e ficheiros de
      suporte ao jogo (meshes, shaders, textures,
      etc.)
    › User Storage – Espaço fornecido pelo jogador
      para dados do jogo (por ex. saves)




                                            Nelson Correia
Xbox 360

    › Title Storage
       Mesma localização do executável
       Disponível através de
         StorageContainer.TitleLocation
    › User Storage
       Disponibilizada pelo utilizador em runtime
       Solicitada através de StorageDevice.
         BeginShowStorageDeviceGuide()


                                               Nelson Correia
Windows

    › Title Storage
       Mesma localização do executável
       Disponível através de
         StorageContainer.TitleLocation
    › User Storage
       %User_Documents_Folder%SavedGames
         <TitleName>Player<PlayerIndex>
       Acessível através de
         StorageDevice.OpenContainer()
                                       Nelson Correia
Xbox 360

 Subscrição Xbox Live
 Membro XNA Creators Club
 PC com XNA Game Studio Express




                                   Nelson Correia
Racing Game
Xna Developer Center

    › http://msdn2.microsoft.com/en-us/xna/default.aspx
    XNA Team Blog

    › http://blogs.msdn.com/xna/
    Game Studio Express

    › http://forums.xna.com/
    › http://creators.xna.com/
    Demos

    › http://www.xnapost.com/xna_games.html




                                                    Nelson Correia
XNA Framework

Mais conteúdo relacionado

Semelhante a XNA Framework

INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaHeitor Carlos
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5Willian Molinari
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKBruno Cicanci
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...INdT
 
Perguntas e respostas
Perguntas e respostasPerguntas e respostas
Perguntas e respostasTiago
 
Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Tiago Barros
 
Desenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDesenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDiego Lopes
 
TDC 2013 SP | Trilha Games: Acelerando Games Middleware
TDC 2013 SP | Trilha Games: Acelerando Games MiddlewareTDC 2013 SP | Trilha Games: Acelerando Games Middleware
TDC 2013 SP | Trilha Games: Acelerando Games Middlewaretdc-globalcode
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterDevCamp Campinas
 
Fox renderfarm brasil 03 03 2013
Fox renderfarm brasil 03 03 2013Fox renderfarm brasil 03 03 2013
Fox renderfarm brasil 03 03 2013Fernando Guimarães
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Talita Pagani
 
Xna Touch Campus Party
Xna Touch  Campus PartyXna Touch  Campus Party
Xna Touch Campus PartyJosé Farias
 
Criando jogos com o kinect
Criando jogos com o kinectCriando jogos com o kinect
Criando jogos com o kinectJosé Farias
 
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
Curso (2010) - Desenvolvimento de Jogos 2D  com XNACurso (2010) - Desenvolvimento de Jogos 2D  com XNA
Curso (2010) - Desenvolvimento de Jogos 2D com XNAKleber de Oliveira Andrade
 
Introdução ao cocos sharp
Introdução ao cocos sharpIntrodução ao cocos sharp
Introdução ao cocos sharpJosé Farias
 

Semelhante a XNA Framework (20)

INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - Sparta
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Game programming
Game programmingGame programming
Game programming
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
 
Game programming
Game programmingGame programming
Game programming
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
 
Perguntas e respostas
Perguntas e respostasPerguntas e respostas
Perguntas e respostas
 
Semcomp
SemcompSemcomp
Semcomp
 
Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04
 
Desenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengineDesenvolvimento de jogos para android com andengine
Desenvolvimento de jogos para android com andengine
 
TDC 2013 SP | Trilha Games: Acelerando Games Middleware
TDC 2013 SP | Trilha Games: Acelerando Games MiddlewareTDC 2013 SP | Trilha Games: Acelerando Games Middleware
TDC 2013 SP | Trilha Games: Acelerando Games Middleware
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em Flutter
 
Fox renderfarm brasil 03 03 2013
Fox renderfarm brasil 03 03 2013Fox renderfarm brasil 03 03 2013
Fox renderfarm brasil 03 03 2013
 
Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5Desenvolvimento de Jogos com HTML5
Desenvolvimento de Jogos com HTML5
 
Xna Touch Campus Party
Xna Touch  Campus PartyXna Touch  Campus Party
Xna Touch Campus Party
 
Criando jogos com o kinect
Criando jogos com o kinectCriando jogos com o kinect
Criando jogos com o kinect
 
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
Curso (2010) - Desenvolvimento de Jogos 2D  com XNACurso (2010) - Desenvolvimento de Jogos 2D  com XNA
Curso (2010) - Desenvolvimento de Jogos 2D com XNA
 
Introdução ao cocos sharp
Introdução ao cocos sharpIntrodução ao cocos sharp
Introdução ao cocos sharp
 
Jogo do Dino
Jogo do DinoJogo do Dino
Jogo do Dino
 
Computação no Desenvolvimento de Jogos Digitais
Computação no Desenvolvimento de Jogos DigitaisComputação no Desenvolvimento de Jogos Digitais
Computação no Desenvolvimento de Jogos Digitais
 

XNA Framework

  • 1. Nelson Correia, Sapo ncorreia@ncorreia.name http://weblogs.pontonetpt.com/ncorreia
  • 3. Os jogos actuais são bastante complexos   Fazer um jogo está apenas ao alcance de grandes (€€€) equipas  Produtores de jogos dificilmente aceitam novas ideias. Os jogos actuais são essencialmente: › Sequelas de outros › Adaptações de filmes ou séries de TV Nelson Correia
  • 4. Abstrai o programador dos detalhes da  arquitectura Permite o foco na lógica do jogo  Permite a qualquer pessoa com paixão  por jogos e noções básicas de programação o desenvolvimento de um jogo Nelson Correia
  • 5. Arquitectura   Content pipeline  Componentes do Jogo › Modelo Aplicacional, Gráficos, Input, Áudio, Math e Armazenamento de Dados Demos  Nelson Correia
  • 6. XNA Game Studio Express XNA Framework Nelson Correia
  • 7. Starterkits Code Content Games Components Extended Application Model Content Pipeline Framework Core Audio Input Math Storage Graphics Framework Direct3D XACT XInput XContent Platform Legenda: XNA Provides You Provide Community Nelson Correia
  • 8. O que é?  › Pipeline de processamento de conteúdos Objectivos  › Permitir a utilização de qualquer ferramenta DCC › Separar o motor do jogo da dependência de conteúdos › Criar um sistema simples e unificado de produção de conteúdos Nelson Correia
  • 9. Content Pipeline (design time) Recurso no Content Content Recurso Importer formato Processor Compiler compilado Importer original Formatos/Modelos Intermédios Legenda: Engine Advanced XNA Game DCC Vendors Developers Engines Framework Developers Nelson Correia
  • 10. Game runtime Content Game Recurso Loader compilado Objects Legenda: Engine Advanced XNA Game DCC Vendors Developers Engines Framework Developers Nelson Correia
  • 11. XNA MyGame Initialize LoadGraphicsContent Game Update Loop Draw UnloadGraphicsContent Nelson Correia
  • 12. partial class MyGame : Microsoft.Xna.Framework.Game { public MyGame() { graphics = new GraphicsDeviceManager(this); content = new ContentManager(Services); } protected override void Initialize() { ... } protected override void LoadGraphicsContent(bool loadAllContent) { ... } protected override void UnloadGraphicsContent(bool unloadAllContent) { ... } protected override void Update(GameTime gameTime) { ... } protected override void Draw(GameTime gameTime) { ... } } Nelson Correia
  • 13. <<interface>> <<interface>> <<interface>> IDisposable IUpdateable IGameComponent IDrawable GameComponent <<interface>> Drawable GameComponent Nelson Correia
  • 14. class Background : DrawableGameComponent { protected override void LoadGraphicsContent(bool loadAllContent) { texture = content.Load<Texture2D>(@quot;ContentTexturesstarsquot;); } protected override void Draw(GameTime gameTime) { spriteBatch.Begin(); spriteBatch.Draw(texture, GetTitleSafeArea(100), Color.White); spriteBatch.End(); } // … } Nelson Correia
  • 15. Draw, Update, … GameScreen Game Manager Draw, Update, … Screen Collection Loading Main Game Screen Highscore Screen Game Over Screen Screen … Nelson Correia
  • 16. Criação de recursos áudio com o XACT  (Microsoft Cross-Platform Audio Creation Tool) Nelson Correia
  • 17. O que é?  › Ferramenta GUI para produção de conteúdos › API responsável por interpretar ficheiros XACT e reproduzi-los em resposta a eventos do jogo Todos os conteúdos áudio têm que estar  neste formato Nelson Correia
  • 18. WAV Files XACT GUI Tool .wav .xap File XNA Content Files .xgs .xwb Content .xsb Pipeline Nelson Correia
  • 19. public class MyGame : Microsoft.Xna.Framework.Game { protected override void Initialize() { audioEngine = new AudioEngine( quot;TestSounds.xgsquot; ); waveBank = new WaveBank( audioEngine, quot;TestWaveBank.xwbquot; ); soundBank = new SoundBank( audioEngine, quot;TestSoundBank.xsbquot; ); soundBank.PlayCue( “StartSoundquot; ); } protected override void Update( GameTime gameTime ) { audioEngine.Update(); } // … } Nelson Correia
  • 20. Digital Analog Vibration Supported on Supported on Number Allowed on Input Device Buttons Controls Effects Windows Xbox 360 System Xbox 360 Controller 14 4 Yes Yes Yes 4 Keyboard > 100 0 No Yes Yes 1 Mouse 5 3 No Yes No 1 Nelson Correia
  • 21. Ver estado em cada update   Actualizar de acordo com o input em cada momento  Possível utilização de reconhecimento de voz em jogos para o Windows Nelson Correia
  • 22. Exemplo  void UpdateInputPlayerOne() { GamePadState currentState = GamePad.GetState(PlayerIndex.One); // Process input only if connected and button A is pressed. if (currentState.IsConnected && currentState.Buttons.A == ButtonState.Pressed) { vibrationAmount = MathHelper.Clamp(vibrationAmount + 0.05f, 0.0f, 1.0f); GamePad.SetVibration(PlayerIndex.One, vibrationAmount, vibrationAmount); } } Nelson Correia
  • 23. Uma das componentes mais poderosas  da Framework  Fornece tipos e operações para manipulação de vectores e matrizes  Operações para: › Verificação de intersecções entre figuras geométricas › Rotação e translacção da câmara › Etc. Nelson Correia
  • 24. Existem duas localizações:  › Title (game) storage – Executável e ficheiros de suporte ao jogo (meshes, shaders, textures, etc.) › User Storage – Espaço fornecido pelo jogador para dados do jogo (por ex. saves) Nelson Correia
  • 25. Xbox 360  › Title Storage  Mesma localização do executável  Disponível através de StorageContainer.TitleLocation › User Storage  Disponibilizada pelo utilizador em runtime  Solicitada através de StorageDevice. BeginShowStorageDeviceGuide() Nelson Correia
  • 26. Windows  › Title Storage  Mesma localização do executável  Disponível através de StorageContainer.TitleLocation › User Storage  %User_Documents_Folder%SavedGames <TitleName>Player<PlayerIndex>  Acessível através de StorageDevice.OpenContainer() Nelson Correia
  • 27. Xbox 360   Subscrição Xbox Live  Membro XNA Creators Club  PC com XNA Game Studio Express Nelson Correia
  • 29. Xna Developer Center  › http://msdn2.microsoft.com/en-us/xna/default.aspx XNA Team Blog  › http://blogs.msdn.com/xna/ Game Studio Express  › http://forums.xna.com/ › http://creators.xna.com/ Demos  › http://www.xnapost.com/xna_games.html Nelson Correia