2. }
Quem sou eu? (){
Instrutor: Leinylson Fontinele Pereira
Bacharel em Ciência da Computação (em
conclusão)
Universidade Estadual do Piauí (UESPI)
Título: Utilização de Heurísticas
Bioinspiradas em Sistemas de Inteligência
Coletiva para Otimização de Roteamento de
Pacotes em Redes Mesh
3. }
O que veremos?
Bom minicurso a todos!
Introdução: O que são jogos ?
Evolução Histórica
Mercado Nacional
Etapas de Desenvolvimento de Jogos
Dicas
4. }
O que faremos? (){
Trabalho com animações;
Noções de temporização e simulação;
Desenho e utilização de imagens vetoriais (sprites) e som digitais (MID, samples);
Programação de efeitos gráficos;
Criação e manipulação de formas primitivas;
Realização de testes de detecção de colisões, bem com todos os passos para produzir
um jogo, da elaboração do enredo ao protótipo.
5. }
Atividade Multidisciplinar
. : : Pré-requisitos : : .
Programação (estrutura de dados, IA, Manipulação de
ponteiros; Laços de repetição);
Engenharia de Software;
Computação Gráfica;
Música;
Matemática;
Física;
IHC;
Educação e Psicologia.
6. }
Do que é feito um jogo?(){
. : : O Jogo : : .
O jogo no nosso contexto é o jogo eletrônico, uma simulação visual e interativa exibida
numa tela.
A interação é tal que o jogador deve ter algum objetivo específico como ir ou sair para
algum lugar , destruir algo, resolver um problema, etc.
Um jogo nos dá um controle sobre um personagem ou um objeto virtual, de modo que
possamos ter um controle e uma imersão no ambiente virtual que se aproxime do nosso
controle e imersão no ambiente real só que com regras e motivações diferentes.
. : : Gameficação : : .
Termo muito utilizado por empresas que buscam difundir seus produtos através de
jogos/animações.
8. }
. : : O Jogador : : .
Jogador é um participante do jogo.
Um jogador pode ser uma pessoa real ou um jogador
controlado pelo próprio jogo. Sempre que nós nos
referirmos à um jogador , estaremos nos referindo a um
jogador real.
A interação do jogo com o jogador é feito com
dispositivos de entrada e saída do jogo, geralmente a
tela e um controle.
Na maioria das vezes, o jogador controla o
personagem central do jogo.
Do que é feito um jogo?(){
9. }
. : : Personagem : : .
O personagem de um jogo de vídeo-game é
personagem fictício para que o jogador controle.
Nos primeiros jogos o personagem era apenas uma
figura sem expressão, dotada de alguma característica
especial (andar , pular) e não possuíam uma história ou
motivação.
O primeiro personagem de vídeo-game foi o Mario,
criado por Shigeru Miyamoto para a Nintendo.
Com o tempo, os personagens de vídeo-game foram
incorporados à cultura-pop. Com mário surgiu o conceito
de mascote do jogo. Esse tipo de personagem carismático
agrega um grande valor por sua importância publicitária
graças a sua identificação com o público.
Do que é feito um jogo?(){
10. }
. : : Menus : : .
Os menus são interfaces de texto e/ou imagens
onde o jogador deve fazer escolhas e ajustes.
Antes do jogo começar os menus servem para
fazer ajuste de preferenciais do jogo, escolha do tipo
de jogo, performance do hardware, etc.
Dentro do jogo eles servem para fazer escolhas e
ajustes mais complexos.
Nem todo jogo precisa de menus dentro do jogo,
mas certamente vai precisar de um menu antes do
jogo começar .
Do que é feito um jogo?(){
12. }
. : : HUD : : .
Sigla para Head Up Display. É um método de
representação visual de informações importantes para
o jogador. São como menus não interativos.
Em geral eles exibem informações como munição,
life, arma selecionada, pontuação, dinheiro ou ítens.
O HUD é desenhado por último na tela, de modo
que ele fique sempre visível para o jogador. Ele não
deve se mover muito ou conter palavras para que não
distraia o jogador .
Ele deve ser sempre que possível iconográfico, ou
seja, usando imagens que representem a informação.
Do que é feito um jogo?(){
14. }
. : : Sprites : : .
O Desafio:
Como causar a impresão de movimento dos personagens?
A Solução:
Utilizaremos sprite, ou seja, um conjunto de dados que definem determinado objeto ou
personagem num jogo. Para uma pessoa, por exemplo, podemos ter um sprite que contenha as
posições vertical e horizontal dela no mundo, a direção para onde ela está virada e os bitmaps
que podem representá-la durante o jogo.
Do que é feito um jogo? (){
17. }
. : : Tileset: : .
Consiste em agrupar várias imagens pequenas a fim de montar uma imagem grande.
Do que é feito um jogo?(){
18. }
. : : Som : : .
Embora não sejam fundamentais no jogo, os sons existem nos jogos desde o primeiro jogo.
Os sons ajudam a caracterizar certas ações, aumentar o nível de imersão do jogador e deixa-lo
mais concentrado no jogo.
Os sons podem ser construídos por sonoplastia. Deve-se ter em mente que diferentes sons
provocam diferentes efeitos sobre sensorialidade do jogador. Os sons ligados a uma ação ou
personagem não precisam ser os mesmos sons ligados a estes no mundo real. Pose-se usar
sons diversos afim de obter efeitos cômicos, criar tensões, força ou simplesmente obter
sensações agradáveis.
Do que é feito um jogo?(){
19. }
. : : Música : : .
A música serve para se criar uma base para as imagens e os outros sons.
Com a construção da música certa pode-se criar ambientes agradáveis, tensos, pode-se
deixar o jogador mais nervoso com uma música mais rápida e pode-se até usar o recurso do
silêncio para criar um clima de suspense.
É sempre bom ter algum repertório de músicas no jogo, e ter músicas de duração
razoável, caso contrário as músicas podem ficar chatas e repetitivas.
As músicas de jogos também criam um lembrança especial do jogo nos jogadores e cria
um sensação agradável ao se jogar .
Do que é feito um jogo?(){
20. }
. : : Física : : .
Um jogo é uma simulação. Essa simulação é, na maioria das vezes, uma representação do
mundo em que vivemos. Essa representação, seja por limitações de software e hardware ou por
escolha estética, não contem todos os aspectos do mundo real. Porém um aspecto que quase
sempre está presente é o físico.
Esse aspecto se manifesta principalmente na detecção de colisão.
Se o objeto A depois que ele se mover colide em algo então faz alguma coisa.
Essa alguma coisa pode variar de jogo para jogo. Pode ser que o objeto A seja um personagem
e o algo seja uma parede. Então o "faz alguma coisa” pode ser nada, ele bate na parede portanto
não anda, mas pode ser que o personagem tenho batido em algo que o machuque como o fogo,
então o "faz alguma coisa" pode ser tirar vida do jogador .
Uma técnica de colisão bem simples e que vamo usar aqui é verificar se o retângulo que
envolve o sprite toca o retângulo que envolve o outro sprite:
Do que é feito um jogo?(){
22. }
Do que é feito um jogo?(){
. : : Finite State Machines : : .
23. }
Quem participa da criação? (){
Game Designer
Elabora os elementos do jogo bem como sua mecânica. Os elementos são
os personagens e o cenário e a mecânica são as possibilidades que o
jogador tem de interagir com o jogo. Empresas que elaboram jogos de
ponta modernos dividem as responsabilidades do game designer com
outros profissionais relacionados, sendo os principais, o combat designer
e o level designer.
Roteirista
Descreve como é a trama do jogo, o perfil psicológico dos personagens e
a interação entre eles, sendo a interação do tipo social e/ou psicológica, a
qual não necessariamente corresponde àquela entre o jogador e os
personagens do jogo.
Tester
Trabalha na equipe de Q&A (Quality Assurance - Controle de
qualidade). Testa diversos aspectos do jogo e relata os pontos falhos ou a
serem melhorados.
24. }
Quem participa da criação? (){
Programador
Elabora a programação do jogo. Desenvolve códigos para lidar com
AI, música, interação, etc. Com exceção de jogos independentes uma
empresa tem diversos programadores em seu elenco, sendo que cada
um é especializado numa área (rendering, ai, rede, etc…).
Engenheiro de software
Projeta os componentes de software do jogo envolvendo diversos
aspectos como a composição dos objetos, a interface deles, a
interrelação existente entre eles, etc.
Programador Web && Programador de redes = ¬¬ aff
Programador de AI
Responsável por programar os algoritmos de Inteligência Artificial
usados no jogo. Dentre estes algoritmos estão o de planejamento
estratégico de grupo num atirador de primeira pessoa, a montagem da
estratégia do time controlado pela CPU num jogo de esportes, o
planejamento de caminho para levar um personagem NPC de um
local ao outro, etc.
25. }
Quem participa da criação? (){
Engenheiro de som
Produz os efeitos sonoros e a música tema.
Level designer
Faz o projeto da fase em que o jogador se encontra. Quais
elementos compõem a fase, há a presença de alguma característica
distintiva no terreno como aclives, declives, montanhas, etc.
Combat Designer
Projeta como será o combate entre o jogador e o computador.
Quais são os elementos que devem estar presentes no combate,
qual o papel destes elementos (dano, cobertura, etc).
31. }
Os bastidores de um jogo(){
Preparar os elementos. Nessa parte, o programa irá carregar o
necessário para sua execução (como imagens e sons), bem
como preparar as estruturas de dados usadas pelo mesmo.
Montar a primeira tela. Aqui o programa coloca cada elemento
em seu lugar inicial, de acordo com a vontade do
desenvolvedor.
Checar a situação atual do jogo, e aí criar uma nova
tela. Agora o programa deve preparar uma nova tela, levando
em conta a situação anterior do jogo e a(s) entrada(s) do
jogador. É aqui, por exemplo, que o programa checaria se o
quadrado que representa a cabeça da cobrinha está contido na
lista de quadrados que representam seu corpo, ou de forma
mais simples, se a cobrinha bateu nela mesma.
Repetir... Agora tudo o que resta é continuar esse processo de
calcular uma nova tela e mostra-la até que o jogo acabe.
33. }
O que são engines? (){
Definição: “É a ferramenta que se encarregará por entender como o hardware gráfico, irá
controlar os modelos para serem renderizados, tratará das entradas de dados do jogador,
tratará de todo o processamento de baixo nível e outras coisas que o desenvolvedor de jogos
normalmente não deseja fazer ou não tem tempo para se preocupar . ”
35. }
PyGame (){
Você que sempre gostou de jogar e decidiu cursar Ciência da Computação para aprender
como é que aqueles games são feitos e logo se viu travando uma batalha para passar em Cálculo,
Álgebra Linear e Geometria Analítica.
Certo, primeiro é preciso ficar claro que não estamos falando de um programinha a lá RPG
Maker no qual você "pinta" os mapinhas na tela e arrasta personagens pré-feitos para o jogo.
O Pygame é um conjunto de módulos que você importa num código em Python, os quais lhe
disponibilizam uma série de funcionalidades auxiliares para criação de aplicativos multimídia
e games.
36. }
PyGame (){
Vários processadores podem ser usados facilmente.
O uso de vários núcleos adiciona um desempenho muito maior ao seu jogo.
As funções internas são implementadas em C e Assembly.
Código em C costuma ser de 10 a 20 vezes mais rápido que Python. Já Assembly tem uma
performance de mais de 100 vezes maior que Python.
Portátil mesmo.
Aplicativos programados em Pygame podem rodar tanto em plataformas Windows
quanto em Linux, Solaris, FreeBSD, Mac OS, Android, entre outros. O código ainda dá
suporte a Dreamcast e também pode ser usado em dispositivos móveis.
Simples!
O Pygame é usado no projeto OLPC para ensinar programação a crianças. Ao mesmo
tempo, também é a preferência de programadores experientes.
39. }
Allegro (){
Allegro é uma biblioteca de funções para jogos 2D feita em C.
Apesar de ter algumas funções para jogos 3D ela não é indicada para isso, sendo no lugar
dela uma API3d como OpenGL ou DirectX
De acordo com a Companhia Oxford de Música, Allegro é o italiano para "rápido, vivo e
brilhante".
Ele também é um acrônimo recursivo que representa "Allegro Low Level Game Routines"
41. }
Allegro (){
int allegro_init()
Esta é a principal função, e deve obrigatoriamente ser chamada para uma aplicação
Allegro funcionar, lembre-se que a chamada desta função deve ser a primeira a ser feita,
antes de qualquer outra função Allegro.
Exemplo de uso: allegro_init();
PyGame: import pygame
from pygame.locals import*
int makecol( int iRed, int iGreen, int iBlue );
Passando-se os valores dos tons (que variam de 0 a 255), de vermelho, verde e azul, esta
função retorna o código da cor.
Exemplo de uso: makecol (255, 0, 0 );
PyGame: Realizada de forma similar
42. }
Allegro (){
void rest(unsigned int uiTime)
Interrompe a execução do programa durante um intervalo de tempo igual ao passado
como parâmetro, em milisegundos.
Exemplo de uso: rest (1000);
PyGame: Clock = pygame.time.Clock()
Clock.tick(int Time)
void textprintf_ex(BITMAP *bmp, FONT font, int iX, int iY, int iColor, int iCorDeFundo, char sTexto, ... );
Função para exibir um texto na tela, o sexto parâmetro deve ser -1 para um fundo transparente.
Exemplo de uso: textprintf_ex(screen, font, 10, 20, makecol(200, 200, 20), -1, "X vale : %d", 10 );
PyGame: Font = pygame.font.Font("font.ttf",128)
43. }
Allegro (){
void putpixel(BITMAP *bmp, int iX, int iY, int iColor)
Colore um pixel do bitmap, nas coordenadas especificadas no segundo parâmetro e terceiro
parâmetro, na cor passada no quarto parâmetro.
Exemplo de uso: putpixel(screen, 20, 300, makecol(0, 200, 30));
void getpixel(BITMAP *bmp, int iX, int iY, int iColor)
Recupera o valor da cor de um pixel do bitmap, nas coordenadas especificadas no segundo
parâmetro e terceiro parâmetro, na cor passada no quarto parâmetro.
Exemplo de uso: int iPixelColor = getpixel(screen, 20, 300, makecol(0, 200, 30 ));
void floodfill(BITMAP *bmp, int iX, int iY, int iColor);
Preenche um bitmap com a cor especificada, em um espaço fechado, a partir do ponto X e Y.
Exemplo de uso: floodfill (screen, 20, 30, makecol(20, 60, 300));
44. }
Allegro (){
void vline(BITMAP *bmp, int iX, int iY1, int iY2, int iColor);
void hline(BITMAP *bmp, int iX1, int iY, int iX2, int iColor);
void line(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor);
A primeira função desenha uma linha vertical, a segunda função desenha uma linha horizontal e
a ultima função desenha uma linha entre 2 pontos quaisquer.
Exemplo de uso: line (screen, 20, 300, 400, 500, makecol(20, 60, 300));
void rect(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor);
void rectfill(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor);
A primeira função desenha um retângulo sem preenchimento, com o contorno colorido, enquanto
a segunda função desenha um retângulo com preenchimento.
Exemplo de uso: rectfill (screen, 20, 300, 400, 500, makecol(20, 60, 300));
45. }
Allegro (){
void circle(BITMAP *bmp, int iX, int iY, int iRaio, int iColor);
void circlefill(BITMAP *bmp, int iX, int iY, int iRaio, int iColor);
A primeira função desenha um círculo sem preenchimento, com o contorno colorido, enquanto a
segunda função desenha um círculo com preenchimento.
Exemplo de uso: circlefill (screen, 20, 300, 10, makecol(20, 60, 300));
void ellipse(BITMAP *bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor);
void ellipsefill(BITMAP *bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor);
A primeira função desenha uma elipse sem preenchimento, com o contorno colorido, enquanto a
segunda função desenha uma elipse com preenchimento.
Exemplo de uso: ellipsefill (screen, 20, 300, 5, 10, makecol(20, 60, 300));
46. Biblioteca para construção de jogos e aplicações multimídia em geral
Free Source
Voltada mais especialmente para jogos 2D
Conhecida pela facilidade de adicionar entrada de dados via teclado, mouse e joystick.
Suporta arquivos de configuração e de dados comprimidos
Temporizadores
Grande comunidade de desenvolvedores
Allegro (){
47. Multi-plataforma
DOS
Windows
Linux
Mac (OS X)
BeOS
QNX
Primitivas Gráficas
Rectas, círculos, elipses
Polígonos (sólidos, texturados, transparentes)
Texto em modo gráfico
Animações
Allegro (){
48. Incluir <allegro.h> depois de todos os demais includes
Deve sempre aparecer uma chamada à função allegro_init() o mais perto possível do início
do programa.
Da mesma forma devem ser chamadas, a seguir, as funções install_keyboard(),
install_mouse() e install_timer().
A função allegro_exit() deve ser chamada no final do programa.
Colocar a macro END_OF_MAIN() logo após a chave final da rotina main()
Ao compilar, incluir a biblioteca alleg:
gcc -o test test.c –lalleg
Allegro (){
49. Especificado antes de começar a desenhar:
int set_gfx_mode (int card, int w, int h, int v_w, int v_h);
Onde:
card é usualmente GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREEN ou
GFX_AUTODETECT_WINDOWED
w , h largura e altura
v_w , v_h largura e altura virtual (normalmente, 0)
Allegro (){
50. Bitmaps são matrizes de pixels, em que cada valor indica uma cor
Tela é um BITMAP especial chamado screen
BITMAPs adicionais podem ser criados com:
BITMAP *bmp = create_bitmap(int width, int height);
Allegro (){
51. . : : Periféricos de Entrada – Teclado : : .
Teclado
install_keyboard()
/* Para inicializar as rotinas do teclado */
KEY_ALTGRAlt Direito
KEY_ALTAlt esquerdo
KEY_RCONTROLControl Direito
KEY_LCONTROLControl Esquerdo
KEY_RSHIFTShift Direito
KEY_LSHIFTShitf Esquerdo
KEY_PRTSCRPrint Screen
KEY_SPACEBarra de Espaço
KEY_PAUSEPause
KEY_DOWNSeta para Baixo
KEY_UPSeta para Cima
KEY_LEFTSeta para a Esquerda
KEY_RIGHTSeta para a Direita
KEY_ENTEREnter
KEY_ESCEsc
KEY_0 ... KEY_9Teclado Normal 0 a 9
KEY_0_PAD ... KEY_9_PADTeclado Numérico 0 a 9
KEY_A, KEY_B...KEY_ZA, B ... Z
Código na ArrayTecla
Váriável global int key[]
permite ver quais teclas estão
pressionadas.
constantes definidas para identificar
cada tecla
Allegro (){
52. install_mouse() /* Para inicializar as rotinas do mouse */
Retorna -1 em caso de falha ou o número de botões que o mouse tem em caso de sucesso
. : : Periféricos de Entrada – Mouse : : .
Usa-se a função show_mouse para que o cursor do mouse seja mostrado no bitmap especificado
Passando NULL como parâmetro esconde o cursor do mouse
Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por cima e
estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer coisa
Allegro (){
As variáveis mouse_x e mouse_y contêm a posição do cursor do mouse na tela.
A variável mouse_b contém o estado dos botões.
(mouse_b & 1) é verdadeiro se o botão esquerdo estiver pressionado.
(mouse_b & 2) é verdadeiro se o botão direito estiver pressionado.
53. Som digital: WAV. Música: MID.
Antes de se tocar um som digital ou música deve-se carregá-los da seguinte forma:
/* declaração das variáveis que guardarão sons e músicas */
SAMPLE *som1; /* SAMPLE = arquivos de som digital */
MIDI *musica; /* MIDI = arquivos de música */
/* carrega os arquivos usando-se as respectivas funções */
som1 = load_wav(“arquivo.wav”); /* para arquivos wav */
musica = load_midi(“arquivo.mid”); /* para arquivos mid */
Ponteiro nulo -> arquivo não encontrado.
Allegro - Som (){
54. Para tocar uma música usa-se a função play_midi. O primeiro parâmetro é o arquivo
MIDI carregado, o segundo indica se ele tocará em loop ou não.
/* Exemplo para tocar um arquivo MIDI */
MIDI *musica; /* declaração da variável a ser usada */
musica = load_midi(“musica.mid”); /* carrega arquivo */
play_midi(musica,TRUE); /* toca a música em loop */
Para parar de tocar uma música usa-se a função stop_midi().
Som – MIDI’s (){
55. Para tocar um som digital usa-se a função play_sample. Os cinco parâmetros indicam:
arquivo carregado, volume (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio a meio),
freqüência (1000 usa a frequência original, 500 usa a metade da freqüência original etc.) e se
vai ser tocado em loop
Função stop_sample() pára de tocar
/* Exemplo para tocar um arquivo de som WAV */
SAMPLE *som; /* declaração da variável a ser usada */
som = load_wav(“som.wav”); /* carrega arquivo */
play_midi(musica,255,128,1000,FALSE); /* toca som */
Som - Samples (){
56. Executar pedaço de código em velocidades diferentes
Para isso, colocar cada um dos trechos de código numa função diferente
Allegro só permite o uso de 16 timers
int install_int(void (*proc)(), int speed) /* cria timer */
install_timer(); /*inicializa timer, opcional */
void remove_int(void (*proc)()) /* remove função da lista */
Notas:
Todas variáveis globais acessadas nos timers devem ser trancadas com a macro
LOCK_VARIABLE()
Todas as funções de "timer" devem ser trancadas com
LOCK_FUNCTION()
speed representa milésimos de segundo
Timming no Allegro (){
57. }
Etapas de elaboração de um jogo (){
Idéia
Rascunho do jogo
Detalhamento do jogo
Game Design Document (GDD)
Produção de áudio e imagens 2D
Desenv. de artefatos computacionais
(engines)
Integração (arte e computação)
58. }
Idéia (){
Muitas idéias vem dos sonhos.
Surgem de pequenos conceitos expandidos em Brainstorm.
Grandes idéias poder parecer ridículas no começo.
59. }
Rascunho do jogo (){
Personagens, fases, itens com pequenas descrições.
Fluxo das telas do jogo e menus.
60. }
Detalhamento do jogo (){
O que o jogador fará no jogo ?
Quantos inimigos o herói vai enfrentar ? Como eles são ?
Quais as armas disponíveis que o jogador poderá usar ?
Como será o sistema de vida do jogador ?
Qual o objetivo do jogo ? Quantas fases terá ? Como elas
serão (cenário, inimigos, dificuldade, etc) ?
Quantos jogadores poderão jogar o jogo ?
Qual o tipo de visualização gráfica ?
Qual o tipo de trilha sonora ?
61. }
Game Design Document (GDD){
Conceito:
– Nome do jogo, público alvo, história, regras...
Especificações técnicas:
– Hardware, sistema operacional...
Especificações do jogo:
– Número de fases, personagens, itens, cenários...
Dispositivo de entrada:
– Mouse, teclado...
Design gráfico e arte:
– Abertura, layout de menus e telas, final do jogo...
Sonorização:
– Músicas nos menus, músicas nas fases...
Desenvolvimento:
– Tempo de desenvolvimento, alocação de pessoas...
62. }
Programação de Jogos (){
. : : Algumas Técnicas : : .
Animação com Double Buffering
Scrolling
Sprites
Detecção de Colisão
63. Dar a impressão de que coisas se movem
Pode significar mover um pixel ao longo da tela mas, geralmente, significa uma
mudança repetitiva da apresentação de algo para que dê a ideia de que se move.
Qual a técnica mais simples?
limpamos a tela, desenhamos os objetos, limpamos a tela novamente, desenhamos
os objetos nas novas posições.
Animação (){
64. }
Double Buffering (){
O Problema:
Quando vamos fazer animações usando o Allegro, surgem alguns problemas relacionados
aos vários métodos que podem ser utilizados. O método mais simples que podemos imaginar é
aquele em que limpamos a tela, desenhamos os objetos, limpamos a tela novamente,
desenhamos os objetos nas novas posições, e assim por diante. Este método, porém, tem um
grave problema: a tela pisca a cada limpeza.
A Solução:
Dispomos de um bitmap auxiliar (chamado de buffer) que, normalmente, possui o tamanho
da tela (ou o tamanho da região onde ocorre a animação). Desenhamos, neste buffer, os objetos
que devem ser apresentados na tela. Após isso, desenhamos o conteúdo do buffer na tela,
fazendo com que os objetos apareçam. Limpamos, então, o buffer, desenhamos os objetos
novamente em suas novas posições, passamos o conteúdo do buffer para a tela, e assim por
diante.
65. Qual o problema desta técnica?
Efeito Flicker - efeito de cintilação ou vibração de uma imagem na tela do computador
Instante 1 Instante 2: Limpar a tela Instante 3
Double Buffering (){
66. Qual a solução?
Instante 2: Limpar a telaInstante 1 Instante 3
Buffer
Instante 1 Instante 3
Tela
Instante 2
Efeito Flicker (){
67. }
Scrolling (){
O Problema:
Como dar movimento ao personagem e aos objetos envolvidos?
A Solução:
Movimento de cenário. O scrolling consiste em movimentar o fundo do cenário e,
normalmente, deixar o personagem controlado parado, o que causa uma sensação de
movimento. O scrolling pode ser horizontal, vertical ou em ambas as direções.
O exemplo demonstra como utilizar o scrolling, desenhado um boneco (parado) no meio da
tela, enquanto o fundo se move de baixo para cima, fazendo com que tenhamos a sensação de
que o boneco está caindo.
68. }
Parallax Scrolling (){
O Problema:
Como causar a sensação de profundidade presente em jogos 3D?
A Solução:
Utilizar vários fundos que se movimentam em velocidades diferentes.
O exemplo demonstrará um parallax scrolling horizontal.
69. }
Detecção de Colisão (){
O Problema:
Como verificar se dois sprites estão sobrepostos, ou seja, se houve uma colisão?
A Solução:
Existe o método que chamamos de força bruta (checar cada ponto de um sprite com cada
ponto de outro sprite) qué é ineficiente, a maior parte dos outros métodos são aproximativos.
Veremos o principal deles, que consiste em dividir os sprites em retângulos, de forma que
possamos verificar se cada retângulo está ou não sobreposto a outro.
Fazer com que o sprite tenha sua movimentação limitada às bordas do nosso jogo não deixa
de ser uma forma de detecção de colisão, bem simples, é verdade. Porém, em jogos 2D,
geralmente se deseja realizar detecção de colisão entre dois ou mais sprites no jogo.
70. }
Detecção de Colisão (){
. : : Colisão entre Esferas : : .
Contudo, apesar do sistema de detecção de colisões estar utilizando o algoritmo do bouncing
box, depois de alguns testes você perceberá um problema. Se os sprites colidirem
diagonalmente, eles irão colidir antes de atingirem um ao outro de verdade. Isso está ocorrendo
justamente por utilizarmos caixas para representar a forma geométrica das esferas.
Quando queremos testar colisões entre esferas, teremos que verificar se a distância entre os
centros delas são menores que a soma dos seus raios. Em caso positivo, então uma colisão
ocorreu. Essa é a forma mais eficiente de detectar colisões entre duas esferas.
Para detectar a colisão entre duas formas circulares, usamos o teorema de Pitágoras:
(r2 = x2 + y2)
71. }
Detecção de Colisão (){
. : : Colisão entre Esferas : : .
A soma dos quadrados dos dois lados (hipotenusa
ao quadrado) é menor ou igual que o quadrado da
soma dos raios das duas formas (que no fundo, é
como se fosse o quadrado de um dos lados), mais o
quadrado da soma dos raios das duas formas (que
no fundo, é como se fosse o quadrado do lado
restante. Esta "grande" soma, é como se fosse uma
segunda hipotenusa ao quadrado.). Básicamente,
quando a distância entre as duas formas (ao
quadrado) for igual ou menor que a soma dos dois
raios (ao quadrado), dá-se a colisão..
72. }
Detecção de Colisão (){
. : : Colisão entre Esferas : : .
If ((formx*formx + formy*formy) <= ((rad1 + rad2)*(rad1 + rad2)) + ((rad1 + rad2)*(rad1 + rad2)))
"/:collission" = "Sim"
Else "/:collission" = "Não"
End If
74. }
Dicas – Produção & Pesquisa (){
Som
– Sound Forge: produção de trilhas e efeitos sonoros.
– Cubase: mixagem de canais MIDI
– Audacity: permitir criar áudio, inclusive combinar diferentes canais de som.
Imagens 2D
– Tiles
– Bricks
– Layers
– Sprites
75. }
Dicas – O que fazer ? (){
Estudar muito !
Conhecer as novidades no mundo dos jogos
Jogar bastante e diferentes tipos de jogos
Buscar fazer contatos
Participar de eventos relacionados
Começar a desenvolver jogos fáceis:
– Pong, Arkanoid, Space Invaders, Tetris, Pacman...
83. }
Referências (){
Introdução ao Desenvolvimento de Jogos, Kleber de Oliveira Andrade.
Game Level Design, disponível em: http://www.gamasutra.com/view/feature/175950/the_fundamental_pillars_of_a_.php
McGugan, Will, “Beginning Game Development with Python and Pygame”, 2007.
“PyGameLib”, http://www.pygame.org/, Outubro.