indt mobile labs - sparta

Post on 04-Aug-2015

355 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

# 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

top related