thiago valle e heitor repolho - utilizando sparta para para desenvolvimento de jogos

31
UTILIZANDO SPARTA PARA DESENVOLVIMENTO DE JOGOS

Upload: indt

Post on 21-Jul-2015

304 views

Category:

Documents


1 download

TRANSCRIPT

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ÇÃ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)

{

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 = Apps

XNA = Jogos

XNA + Silverlight perde um pouco de desempenho

Memória, tombstoning, sprites, input e câmera

PARTICULARIDADES

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, vantagens, arquitetura

THIS IS SPARTA!

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

SpartaGame

SpartaState

SpartaSprite

Update Draw Update Draw Update Draw

ARQUITETURA

MenuState LevelSelectState GameplayState

SpartaState

ARQUITETURA SpartaSprite SpartaTexture SpartaDrawable SpartaObject

SpartaButton SpartaTexture SpartaDrawable SpartaObject

SpartaCamera2D SpartaDrawable SpartaObject

TEXTURE: XNA

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); }

TEXTURE: SPARTA

private SpartaTexture texture;

texture = new SpartaTexture(“image”);

Add(texture);

TRANSLAÇÃO: XNA

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

DEMO TIME!

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]