ROTEIRO • Introdução ao desenvolvimento de jogos
• Como funciona o XNA
• Problemas no desenvolvimento
• O que é o Sparta
• Vantagens em usar Sparta
• Arquitetura
• Demos
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
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) }
XNA É a solução disponível no Windows Phone para desenvolvimento de jogos
Silverlight = Apps
XNA = Jogos
XNA + Silverlight perde um pouco de desempenho
TOMBSTONING Tombstoning deve ser uma preocupação do programador quando desenvolver para Windows Phone
Não é uma obrigação do jogo ter tombstoning
:(
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
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);
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
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
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
ARQUITETURA
SpartaGame
SpartaState SpartaState SpartaState
SpartaObject
SpartaSprite SpartaPropertyAnimation Sparta…
ARQUITETURA SpartaSprite SpartaTexture SpartaDrawable SpartaObject
SpartaButton SpartaTexture SpartaDrawable SpartaObject
SpartaCamera2D SpartaDrawable SpartaObject
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); }
TRANSLAÇÃO: XNA private Texture2D texture; private Vector2 pos; private Vector2 posFinal; private float velocidade; protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load<Texture2D>(“image"); pos = Vector2.Zero; velocidade = 10f; }
protected override void Draw(GameTime gameTime) { spriteBatch.Begin(); spriteBatch.Draw(SpriteTexture, pos, Color.White); spriteBatch.End(); base.Draw(gameTime); } Protected override void Update(GameTime gameTime) { if (pos.x < posFinal.x) { pos.x += velocidade * (float)gameTime.ElapsedGameTime.TotalSeconds; } }
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();
FEATURES • Controle de telas
• Transição entre telas
• Engine física integrado
• Sprites
• PropertyAnimation
• Classes pra UI
• Som
• Câmera
• Tombstoning
• Modo debug
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
ROADMAP • 3D
• Multiplataforma (HTML5, C++/DirectX)
• Construtor de Interface
• Integrar engines de física de uma maneira flexível
CONTATO Site do projeto http://projects.developer.nokia.com/sparta Grupo desenvolvimento de Windows Phone facebook.com/groups/nokiadevwp/ Heitor [email protected] Thiago [email protected]