USPGameDevUSPGameDev
Desafios de Computação noDesafios de Computação noDesenvolvimento de JogosDesenvolvimento de Jogos
Vinícius K Daros + Wilson Kazuo MizutaniVinícius K Daros + Wilson Kazuo Mizutaniwww.uspgamedev.orgwww.uspgamedev.org
Encontro BCCEncontro BCC12/09/201412/09/2014
22/41/41
Quem somosQuem somos
33/41/41
Jogos digitaisJogos digitais
Estrutura básicaEstrutura básica
44/41/41
Programas interativosProgramas interativos
Execução sem fimExecução sem fim
Detecção de eventosDetecção de eventos
Controle de tempoControle de tempo
55/41/41
Game LoopGame Loop
Fonte: http://gameprogrammingpatterns.com/game-loop.htmlFonte: http://gameprogrammingpatterns.com/game-loop.html
66/41/41
Jogos digitaisJogos digitais
Padrões de projetoPadrões de projeto
77/41/41
Padrões de projetoPadrões de projeto
Como organizar os tipos de Como organizar os tipos de elementos do jogo?elementos do jogo?
88/41/41
Herança vs. ComposiçãoHerança vs. Composição
Fonte: http://gameprogrammingpatterns.com/component.htmlFonte: http://gameprogrammingpatterns.com/component.html
99/41/41
Herança vs. ComposiçãoHerança vs. Composição
Fonte: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/Fonte: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
1010/41/41
Simulando FísicaSimulando Física
ColisõesColisões
1111/41/41
Casos fáceisCasos fáceis
r1
r2
CírculosCírculos
d
1212/41/41
Casos fáceisCasos fáceis
Axis-aligned bounding boxesAxis-aligned bounding boxes
y
x
top1
bottom1
top2
bottom2
left1
right1
left2
right2
1313/41/41
Casos fáceisCasos fáceis
Axis-aligned bounding boxesAxis-aligned bounding boxes
y
x
top1
bottom1
top2
bottom2
left1
right1
left2
right2
1414/41/41
Círculo vs. retânguloCírculo vs. retângulo
Vamos assumir uma AABBVamos assumir uma AABB
1515/41/41
Círculo vs. retânguloCírculo vs. retângulo
Ponto do retângulo mais Ponto do retângulo mais próximo da circunferênciapróximo da circunferência
P
xP = max(left,min(right,xC))yP = max(bottom,min(top,yC))
1616/41/41
Ponto vs. Polígono convexoPonto vs. Polígono convexo
P
Como saber se o ponto está Como saber se o ponto está dentro?dentro?
1717/41/41
Ponto vs. Polígono convexoPonto vs. Polígono convexo
Produto vetorialProduto vetorial
vx vy
wx wy
v × w = = ki j kvx vy 0wx wy 0
1818/41/41
w
v
Ponto vs. Polígono convexoPonto vs. Polígono convexo
P
Usamos o sinal do determinante!Usamos o sinal do determinante!
vx vy
wx wy
v × w = = ki j kvx vy 0wx wy 0
Está fora se > 0 vxwy – vywx > 0
vxwy > vywx (!!!)
vx vy
wx wy
1919/41/41
Simulando FísicaSimulando Física
Detectar objetos próximosDetectar objetos próximos
2020/41/41
Implementação ingênuaImplementação ingênua
Todos contra todosTodos contra todos
Colide? obj2 obj3 obj4 ...
obj1 ? ? ? ?
obj2 ? ? ?
obj3 ? ?
... ?
2121/41/41
Implementação ingênuaImplementação ingênua
2222/41/41
Partição espacialPartição espacial
A ideia é agrupar objetos A ideia é agrupar objetos próximospróximosExemplo: Quad-TreeExemplo: Quad-Tree
Fonte: http://gameprogrammingpatterns.com/spatial-partition.htmlFonte: http://gameprogrammingpatterns.com/spatial-partition.html
2323/41/41
Partição espacialPartição espacial
Outras estruturas conhecidas:Outras estruturas conhecidas:● Grade fixaGrade fixa● K-Dimensional TreeK-Dimensional Tree● Interval K-Dimensional TreeInterval K-Dimensional Tree● Binary Space Partitioning TreeBinary Space Partitioning Tree● R-TreeR-Tree
2424/41/41
Inteligência ArtificialInteligência Artificial
Definindo comportamentosDefinindo comportamentos
2525/41/41
Máquina de Estados FinitaMáquina de Estados Finita
rest
follow
hero spotted
attack
within range
escape
hero lost
low hp
low hp
out ofrange
hero lost
2626/41/41
Inteligência ArtificialInteligência Artificial
Path-findingPath-finding
2727/41/41
Algoritmo A*Algoritmo A*
Variação do algoritmo de DijkstraVariação do algoritmo de Dijkstra
2828/41/41
Algoritmo A* relaxadoAlgoritmo A* relaxado
Heurística com pesoHeurística com peso
2929/41/41
RenderizaçãoRenderização
Apresentando o jogoApresentando o jogo
3030/41/41
SpritesheetsSpritesheets
3131/41/41
Projeções tridimensionaisProjeções tridimensionais
3232/41/41
Projeções tridimensionaisProjeções tridimensionais
x
y
x' Transformação Linear:Transformação Linear:
T: R² → RT: R² → R22
T(v+u) = T(v) + T(u)T(v+u) = T(v) + T(u)T(k.v) = k.T(v)T(k.v) = k.T(v)
T(0) = 0T(0) = 0
Transformação Afim:Transformação Afim:
P: R² → RP: R² → R22
P(v) = T(v) + pP(v) = T(v) + pP(0) = pP(0) = p
P 0
3333/41/41
Projeções tridimensionaisProjeções tridimensionais
Coordenadas homogêneasCoordenadas homogêneas
a b u x ax + by + u a b 0 x uc d v y = cx + dy + v = c d 0 y + v0 0 1 1 1 0 0 1 1 0
a b u x ax + byc d v y = cx + dy0 0 1 0 0
3434/41/41
RasterizaçãoRasterização
3535/41/41
SombrasSombras
Shadow-castingShadow-casting simples simples
3636/41/41
Conteúdo procedimentalConteúdo procedimental
Autômatos celularesAutômatos celulares
3737/41/41
GramáticasGramáticas
RegrasRegras
A → ABAA → ABA
B → CCB → CC
ExpansãoExpansão
1) A1) A
2) ABA2) ABA
3) ABACCABA3) ABACCABA
4) ABACCABACCABACCABA4) ABACCABACCABACCABA
3838/41/41
Autômato celularAutômato celular
1 2 3
3939/41/41
Conteúdo procedimentalConteúdo procedimental
● NoisesNoises
● SATsSATs
Outros algoritmos e técnicasOutros algoritmos e técnicas
4040/41/41
Unlimited Slide WorksUnlimited Slide Works
Obrigado!Obrigado!
www.uspgamedev.orgwww.uspgamedev.org
www.fb.com/uspgamedevwww.fb.com/uspgamedev
[email protected]@uspgamedev.org
4141/41/41
Unlimited Slide WorksUnlimited Slide Works
● NetworkingNetworking– Peer-2-peer (Age of Empires)Peer-2-peer (Age of Empires)– Client/Server (QuakeWorld)Client/Server (QuakeWorld)
● ShadersShaders● MultithreadingMultithreading