Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouRaíssa Bonifacio Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.