A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Arquiteturas de jogos e Animação 2D baseada em Sprites

Apresentações semelhantes


Apresentação em tema: "Arquiteturas de jogos e Animação 2D baseada em Sprites"— Transcrição da apresentação:

1 Arquiteturas de jogos e Animação 2D baseada em Sprites
Prof. André Campos 30/04/2004

2 Arquitetura e características de jogos

3 Características dos jogos
Jogos  Aplicações em tempo-real Aplicações cujo tempo de resposta é crítico Possuem condições de restrições de tempo Ex: Monitoramento de vôos em um aeroporto Jogos  Aplicações Interativas Aplicações cujo tempo de resposta das interações do usuário também é crítico Ex: Controle de tráfego aéreo Jogos  Simulações Sincronização de Tempo real vs. Tempo virtual Eventos simulados

4 Jogos = simulações interativas em tempo real
Tarefas concorrentes Apresentação (síncrona) Captura de eventos externos, ex. do usuário (assíncrona) Atualização do estado do “mundo simulado” (discreta) Eventos do usuário Apresentação Mundo simulado Atualização do estado

5 Módulos gerais Multi-threading? Apresentação (visual,áudio,...)
Interação com o usuário Lógica do jogo Rede Multi-threading?

6 Módulos sincronizados
Abordagens Seja Interação, Lógica e Rede = Atualização Atualização Atualização Atualização Apresentação Apresentação Apresentação Único thread Vários threads Módulos sincronizados

7 Módulos sincronizados
Estratégia mais amplamente utilizada Idéia Executar as rotinas de atualização e apresentação seqüencialmente (único thread) em loop. Descartar as atualizações de forma a deixar um intervalo de tempo fixo de chamada às atualizações. Atualizações Apresentações Tick time

8 Exemplo básico de loop int TICK_TIME = 1000/frequency;
long timeLastCall = getTime(); while(!end) { elapsedTime = getTime() – timeLastCall; if (elapsedTime > TICK_TIME) { gameUpdate(); timeLastCall = getTime(); } gamePresentation(elapsedTime);

9 Passos na fase de atualização
Atualização do usuário Captura eventos Calcula restrições Atualiza o estado do jogador Atualização do mundo Elementos passivos Seleciona elementos relevantes para a engine Elementos dinâmicos básicos Ordena por relevância Executa mecanismos de controle Atualiza estado Elementos inteligentes (agentes) Tomada de decisão de acordo com objetivos e restrições

10 Passos na fase de apresentação
Apresentação do mundo Seleciona elementos visíveis Seleciona resolução dos elementos (nível de detalhe) Empacota geometria Apresenta Seleciona e toca fontes de som Apresentação de personagens (NPC) Seleciona personagens visíveis Anima personagem Apresentação do jogador (avatar) Anima avatar

11 Animação 2D baseada em Sprites

12 O que é um Sprite? “Cel animation”: técnica utilizada no início da indústria de animação (Walt Disney) Desenho em folhas transparentes sobre imagem de fundo A ilusão de movimento é dada a partir de uma seqüência de desenhos sobre o mesmo fundo. Em animação 2D, o processo é similar Personagens são representados por várias imagens com partes transparentes A animação é o resultado da apresentação de uma seqüência de imagens (sprite) do personagem.

13 Animação baseada em sprite
Conjunto de sprites de um elemento Imagem de fundo + sprite Loop da animação (do próprio jogo) Ilusão de movimento

14 Loop da animação Cada sprite pode ter seu próprio tempo de apresentação Importância a “elapsedTime” do loop do jogo gamePresentation(elapsedTime); 40ms 20ms 20ms 20ms

15 Exemplo de atualização
void spriteUpdate(long elapsedTime) { animTime += elapsedTime; if (animTime >= totalDuration) { animTime = animTime % totalDuration; currImageIndex = 0; } while (animTime > image[i].endTime) { currFrameIndex++; } currFrameIndex 0ms 40ms 60ms 80ms 100ms animTime_0 animTime_1

16 Area de memória DoubleDuffer
Double buffering Animação piscando Seqüência repetida de desenhar na tela a imagem de fundo e depois o sprite Solução Desenhar a imagem de fundo e o sprite em uma área de memória temporária (imagem) e depois transferir esta imagem para a tela Area de memória DoubleDuffer Tela

17 Page flipping Modo “full-screen” Solução
Copiar toda uma área de memória para a memória de tela é custoso (tempo) Solução Redirecionar o ponteiro da área de memória da tela para o doublebuffer e utilizar um segundo buffer para desenhar o próximo frame. Ponteiro da tela Display buffer Back buffer Tela

18 Efeito Tearing Monitores possuem taxa de refresh
Ex: 75MHz  monitor é atualizado 75 vezes/s Tearing ocorre quando um page flipping é feito durante a atualização do monitor. Solução Sincronizar o page flipping com a taxa de refresh do monitor Antigo frame Novo frame

19 Exercício Implementar o loop de um jogo, onde o usuário controla o andar de seu avatar para a direita e para a esquerda


Carregar ppt "Arquiteturas de jogos e Animação 2D baseada em Sprites"

Apresentações semelhantes


Anúncios Google