View
355
Download
2
Category
Preview:
Citation preview
# i n d t m o b i l e l a b s
UTILIZANDO SPARTA PARA DESENVOLVIMENTO DE JOGOS
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 a jogos, sobre o XNA
DESENVOLVIMENTO DE JOGOS
INTRODUÇÃOJogos 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){ input processamento do jogo output}
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 = AppsXNA = Jogos
XNA + Silverlight perde um pouco de desempenho
Memória, tombstoning, sprites, input e câmera
PARTICULARIDADES
TOMBSTONINGTombstoning deve ser uma preocupação do programador quando desenvolver para Windows Phone
Não é uma obrigação do jogo ter tombstoning
:(
CÂMERA E INPUTSeguir 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 INPUTaTranslatedPoint.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ÓRIAPelas 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, vantagens, arquitetura
THIS IS SPARTA!
O QUE É O SPARTAFramework 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
ARQUITETURASpartaGame
SpartaState SpartaState SpartaState
SpartaObjectSpartaSprite SpartaPropertyAnimation Sparta…
ARQUITETURA
SpartaGame
SpartaState
SpartaSprite
UpdateDraw
UpdateDraw
UpdateDraw
ARQUITETURA
MenuState LevelSelectState GameplayState
SpartaState
ARQUITETURASpartaSprite SpartaTexture SpartaDrawable SpartaObject
SpartaButton SpartaTexture SpartaDrawable SpartaObject
SpartaCamera2D SpartaDrawable SpartaObject
TEXTURE: XNA
TEXTURE: XNAprivate 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);}
TEXTURE: SPARTA
private SpartaTexture texture;
texture = new SpartaTexture(“image”);
Add(texture);
TRANSLAÇÃO: XNA
TRANSLAÇÃO: XNAprivate 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
DEMO TIME!
CONTATOSite do projetohttp://projects.developer.nokia.com/sparta
Grupo desenvolvimento de Windows Phonefacebook.com/groups/nokiadevwp/
Heitorheitor.repolho@indt.org.br
Thiagothiago.valle@indt.org.br
Recommended