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 Prof. André Campos 30/04/2004.

Apresentações semelhantes


Apresentação em tema: "Arquiteturas de jogos e Animação 2D baseada em Sprites Prof. André Campos 30/04/2004."— 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) Mundo simulado Atualização do estado Eventos do usuárioApresentação

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

6 Abordagens Seja Interação, Lógica e Rede = Atualização Atualização Apresentação Atualização Apresentação Atualização Apresentação Único threadVários threadsMódulos sincronizados

7 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. Tick timeAtualizaçõesApresentações

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) Ordena por relevância Tomada de decisão de acordo com objetivos e restrições Atualiza estado

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 Empacota geometria Apresenta Apresentação do jogador (avatar) Anima avatar Empacota geometria Apresenta

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 Conjunto de sprites de um elemento Animação baseada em sprite Loop da animação (do próprio jogo) Ilusão de movimento Imagem de fundo + sprite

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

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++; } 0ms40ms60ms80ms100ms animTime_0animTime_1 currFrameIndex

16 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 –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 Tela Display buffer Back buffer

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 Prof. André Campos 30/04/2004."

Apresentações semelhantes


Anúncios Google