INdT Mobile Labs - Sparta

504 views

Published on

Utilizando Sparta para desenvolvimento de Jogos. Autores: Thiago Valle e Heitor Carlos.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
504
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

INdT Mobile Labs - Sparta

  1. 1. # indtmobilelabs
  2. 2. UTILIZANDO SPARTA PARADESENVOLVIMENTO DEJOGOS
  3. 3. ROTEIRO • Introdução ao desenvolvimento de jogos • Como funciona o XNA • Problemas no desenvolvimento • O que é o Sparta • Vantagens em usar Sparta • Arquitetura • Demos
  4. 4. DESENVOLVIMENTODE JOGOSIntrodução a jogos, sobre o XNA
  5. 5. INTRODUÇÃO Jogos são sistemas de tempo real pois precisam de resposta rápida e precisa Não são 100% baseados em eventos, o jogo tem um loop que controla tudo
  6. 6. GAME LOOP while (!endGame) { input processamento do jogo output }
  7. 7. GAME LOOP while (!endGame) { if (Keyboard.Jump.Pressed) { Player.Y -= 20 } if (Player.Y == Moeda.Y) { Player.Pontos += 10 Moeda.Delete() } Draw(Player, Player.X, Player.Y) Draw(Moeda, Moeda.X, Moeda.Y) }
  8. 8. XNA É a solução disponível no Windows Phone para desenvolvimento de jogos Silverlight = Apps XNA = Jogos XNA + Silverlight perde um pouco de desempenho
  9. 9. PARTICULARIDADESMemória, tombstoning, sprites, input ecâmera
  10. 10. TOMBSTONING Tombstoning deve ser uma preocupação do programador quando desenvolver para Windows Phone Não é uma obrigação do jogo ter tombstoning :(
  11. 11. CÂMERA E INPUT Seguir o jogador ou outro objeto Facilidade em fazer transformações como zoom e scale Cortar os objetos que estão fora da área desenhável
  12. 12. CÂMERA E INPUT aTranslatedPoint.X = (float)(Math.Cos(theRotation) * (thePoint.X - theOrigin.X) - Math.Sin(theRotation) * (thePoint.Y - theOrigin.Y) + theOrigin.X); float aNumerator = (theRectangleCorner.X * theAxis.X) + (theRectangleCorner.Y * theAxis.Y); float aDenominator = (theAxis.X * theAxis.X) + (theAxis.Y * theAxis.Y); float aDivisionResult = aNumerator / aDenominator; Vector2 aCornerProjected = new Vector2(aDivisionResult * theAxis.X, aDivisionResult * theAxis.Y); float aScalar = (theAxis.X * aCornerProjected.X) + (theAxis.Y * aCornerProjected.Y);
  13. 13. CONTROLE DE SPRITES É preciso uma classe para se fazer animações Classe base para se adicionar em coleções Classes derivadas de desenho que servem para outros propósitos
  14. 14. MEMÓRIA Pelas normas do Windows Phone Store aplicativos em celulares com 256mb não podem ultrapassar 90mb na RAM Garbage Collector trava o jogo quando ativo Tomar cuidado para não instanciar nada no loop pois enche a memória muito rápido Sempre que possível reutilizar coleções ao invés de usar new e dispose
  15. 15. THIS IS SPARTA!O que é o Sparta, vantagens, arquitetura
  16. 16. O QUE É O SPARTA Framework para desenvolvimento de jogos 2D Não é um engine Precisávamos de algo rápido para prototipagem e desenvolvimento Baseado em projetos open source como Flixel e Qt
  17. 17. ARQUITETURA SpartaGame SpartaState SpartaState SpartaState SpartaObject SpartaSprite SpartaPropertyAnimation Sparta…
  18. 18. ARQUITETURA SpartaGame Update Draw Update SpartaState Draw Update SpartaSprite Draw
  19. 19. ARQUITETURA SpartaStateMenuState LevelSelectState GameplayState
  20. 20. ARQUITETURA SpartaSprite SpartaTexture SpartaDrawable SpartaObject SpartaButton SpartaTexture SpartaDrawable SpartaObject SpartaCamera2D SpartaDrawable SpartaObject
  21. 21. TEXTURE: XNA
  22. 22. TEXTURE: XNA private Texture2D texture; protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load<Texture2D>(“image"); } protected override void Draw(GameTime gameTime) { spriteBatch.Begin(); Vector2 pos = new Vector2(0, 0); spriteBatch.Draw(SpriteTexture, pos, Color.White); spriteBatch.End(); base.Draw(gameTime); }
  23. 23. TEXTURE: SPARTA private SpartaTexture texture; texture = new SpartaTexture(“image”); Add(texture);
  24. 24. TRANSLAÇÃO: XNA
  25. 25. TRANSLAÇÃO: XNA private Texture2D texture; protected override void Draw(GameTime gameTime) { private Vector2 pos; spriteBatch.Begin(); private Vector2 posFinal; spriteBatch.Draw(SpriteTexture, pos, Color.Whit private float velocidade; e); spriteBatch.End(); protected override void LoadContent() base.Draw(gameTime); { } spriteBatch = new SpriteBatch(GraphicsDevice); Protected override void Update(GameTime gameTime) texture = Content.Load<Texture2D>(“image"); { if (pos.x < posFinal.x) { pos = Vector2.Zero; pos.x += velocidade * (float)gameTime.ElapsedGameTime.TotalSecond velocidade = 10f; s; } } }
  26. 26. TRANSLAÇÃO: SPARTA private Texture2D texture; texture = new SpartaTexture(“image”); Add(texture); SpartaPropertyAnimation animation = new SpartaPropertyAnimation(texture, "X", 0f, 100f, TimeSpan.FromMilliseconds(500), EasingCurve.EasingCurveType.OutCubic, null); Add(animation); animation.Begin();
  27. 27. FEATURES • Controle de telas • Transição entre telas • Engine física integrado • Sprites • PropertyAnimation • Classes pra UI • Som • Câmera • Tombstoning • Modo debug
  28. 28. PLUS • Open Source e Free • Arquitetura simples • Desenvolvido pra ser extendido • Fácil usar para prototipagem • Desenvolvedores disponíveis • Usa XNA por baixo • Agora disponível em sabor morango
  29. 29. ROADMAP • 3D • Multiplataforma (HTML5, C++/DirectX) • Construtor de Interface • Integrar engines de física de uma maneira flexível
  30. 30. DEMO TIME!
  31. 31. CONTATO Site do projeto http://projects.developer.nokia.com/sparta Grupo desenvolvimento de Windows Phone facebook.com/groups/nokiadevwp/ Heitor heitor.repolho@indt.org.br Thiago thiago.valle@indt.org.br

×