Programação de Jogos: visãogeralparainiciantes<br />dacobrinhaaoBioshockem 50 min… <br />Fabio Fonseca – catavento.art.br<...
Disclaimer<br />Estaapresentação é baseadanosmeusestudossobreprogramação de jogos. Qualquerdisparidade com autor X ou Y ou...
Meta<br />Entender o Game Loop <br />Entender o que é e quaissãooscomponentes de uma game engine<br />
VS.<br />
Antes de começar, o quevocêprecisa saber?<br />Programar<br />Pode ser POO ouestruturada<br />Física e Matemática<br />Sab...
Let’s begin the operation!<br />2D ou 3D, escolhendo o número de dimensões<br />Qual o problema a ser resolvido e paraqual...
Gentleman, start your engines<br />Surge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de...
Gentleman, start yourengines<br />“Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as t...
What’sinside?<br />Específico do jogo<br />HUD, efeitos visuais<br />Áudio e rede<br />Gerenciador de física e<br />animaç...
Depois, as ferramentas<br />O eterno debate sobrelinguagem de programação e sobrequal engine utilizar<br />A melhor e mais...
20infinite loop<br />Game loop ou jogos são ilusões<br />É o laço onde todas as alterações do sistema que compõem um game,...
21infinite loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManager->update())<b...
22infinite loop<br />Não reinvente a roda*<br />Padrões de código<br />Design Patterns<br />Bibliotecas e suas APIs<br />G...
1<br />Visãogeral<br />Game engine simples e seuscomponentes<br />Porqueutilizar<br />Precisarnãoprecisa, masajudabastante...
Porqueutilizar<br />Precisarnãoprecisa… ou um breveconto de Engenharia de software<br />Custos: Time is money. Inclusive o...
Dividir e conquistar<br />
Dividir e conquistar<br />Uma game engine mínima<br />Log<br />
2<br />Desmembrando<br />Porque um componente de log salvarátuavida<br />Precisarnãoprecisa…<br />Mesmo se for um sistema ...
3<br />Desmembrando<br />Recursos, umacolheitafeliz<br />Arquivos de configuração<br />Áudio, imagens, grafos de cenas, mo...
Tenhaseusarquivosestruturados de maneiraamigável<br />Componente de recursos<br />Responsávelpeloconsumootimizado de todos...
O que é…<br />Scene Graph – Grafo de cena<br />http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html<br />
4<br />Desmembrando<br />Input devices, nãoperca o controle<br />Troca de contextos<br />O gerenciadordeve ser capaz de al...
Planejarpara o futuro<br />Input devices, jáperdendo o controle<br />WTF???????<br />MindControlHelmet<br />
Vocabulárioimportante<br />Essesdoismonstrossemprevoltam:<br />Polling<br />Listeners<br />
5<br />Desmembrando<br />Audio, 1, 2, 3, SOM.<br />Semprerelegado, sempreumador de cabeçadepois.<br />O problemadasincroni...
21infinite loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManager->update())<b...
6<br />Desmembrando<br />Renderização, o algoritmo do pintor<br />No final do dia, é atualizar a tela com as informaçõesob...
O quemudou entre frames?<br />Monstro do Polling atacanovamente<br />Polling<br />Checaosgerenciadores de cena e objetos<b...
Primeiramente o quevemprimeiro<br />Algoritmo do Pintor e Z-order<br />Objetos do fundosãodesenhadosprimeiramente.<br />Or...
3D<br />Microsoft Windows API was designed to provide software developers with direct access to low-level functions on PC ...
2D<br />Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, key...
7<br />Desmembrando<br />Cena, fazendouma<br />Cadafase é umacenacompleta e suaconfiguraçãogeral e relação entre oselement...
Volta do grafo de cena<br />Entendendo o porquê do arquivoexterno<br />Pensenos designers<br />Trabalhar com elementosconc...
Entendi! Mas o quedeveconter?<br />Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memória...
8<br />Desmembrando<br />Entidades, tudo o quenão for cenárioousom<br />Todosos sprites em um sólugar<br />Ponte entre e o...
Criandobichos<br />A design pattern factoryemjogos<br />Listas de objetossãoutilizadasparateste de colisão e outroseventos...
9<br />Desmembrando<br />Física, caindo de pau no Newton<br />Na verdade, umabiblioteca de física é um motor de animação d...
EDOs, EDPs, Êita<br />O problema das equaçõesdiferenciais<br />genericscalartransportequation<br />Ok, essa equação é para...
Bibliotecas<br />Box2D<br />
!<br />Resumo<br />O game loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManag...
!<br />Resumo<br />A game engine<br />Uma game engine mínima<br />Log<br />
!<br />There is a lot more…<br />O quefaltou<br />Inteligência artificial<br />Implementação, algoritmos e gerenciadores<b...
Referências<br />Game Engines<br />Game Engine Architecture, Jason Gregory<br />Game Engine Design and Implementation, Ala...
Upcoming SlideShare
Loading in …5
×

Game programming

862 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
862
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • This deck covers 8 common workplace topics and offers suggestion on how you should approach them. I’ve been collecting data on and off for years and thought it would be nice to have it all in one presentation friendly spot. Feel free to use pieces of this presentation as the need arises.
  • Most managers plow through the act of management with few guidelines other than gut or habit on what works best. Luckily there is a large body of well researched material out there on what works. Not all of it agrees. However, there are some obviously broken concepts such as overtime that should be put to rest. And there are some practical ideas like small team sizes that offer a big boost for relatively little effort.
  • The numbers vary slightly here. Some studies claim teams of 3 are good. Others say 9 isn’t so bad. But in general 4 to 8 seems to work well.
  • Game programming

    1. 1. Programação de Jogos: visãogeralparainiciantes<br />dacobrinhaaoBioshockem 50 min… <br />Fabio Fonseca – catavento.art.br<br />
    2. 2. Disclaimer<br />Estaapresentação é baseadanosmeusestudossobreprogramação de jogos. Qualquerdisparidade com autor X ou Y ou design Z ou W ou engine A ou B é porsuaconta e risco. Maselesvãotedizerque o game loop é o mesmo (bem, eumudei a ordem do game loop padrão...).<br />
    3. 3. Meta<br />Entender o Game Loop <br />Entender o que é e quaissãooscomponentes de uma game engine<br />
    4. 4. VS.<br />
    5. 5. Antes de começar, o quevocêprecisa saber?<br />Programar<br />Pode ser POO ouestruturada<br />Física e Matemática<br />Saber aquela do cursinhoajudahorrores…<br />Google e Fóruns<br />pontov.com.br, gamedev.net, box2d.net<br />
    6. 6. Let’s begin the operation!<br />2D ou 3D, escolhendo o número de dimensões<br />Qual o problema a ser resolvido e paraqualplataforma? <br />Simples e original vs. complexo e padrão<br />Tiveumaidéia! Voufazer o Resident Evil 7!<br />O número de dimensõesnãoimportadependendodatuaescolha. <br />Complexo e original<br />Se Δt -> ∞ ...<br />
    7. 7. Gentleman, start your engines<br />Surge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo.<br />Mods: a separaçãocriadapela ID permitiuque gamers individuais e pequenosgruposcriassemjogosbaseadosnaestrutura de Doom.<br />Upgrade: Unreal, Quake III com linguagenspróprias de script.<br />“Data-driven architecture”: Teoricamente a regra de jogo e a parte lógicaficariamseparadas dos outroselementos, permitindoqueváriosjogos do mesmoestilofossemfeitos a partirdamesmaplataforma.<br />Masnãoháseparaçãoclaranem entre elementosnem entre o que é um jogo e o que é a engine.<br />“Tudoacontecenaperiferia. Brigas, mortesnaperiferia” – Ratos de porão<br />
    8. 8. Gentleman, start yourengines<br />“Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as thefoundation for manydifferente games without major modification” – Jason Gregory, Game Engine Design Architecture<br />
    9. 9. What’sinside?<br />Específico do jogo<br />HUD, efeitos visuais<br />Áudio e rede<br />Gerenciador de física e<br />animação de corpos<br />Renderização e<br /> gerenciador de cenas<br />Inicialização e configuração<br />Abstração do SO e SDKs<br />específicas para cada sistema<br />Hardware e SO.<br />
    10. 10. Depois, as ferramentas<br />O eterno debate sobrelinguagem de programação e sobrequal engine utilizar<br />A melhor e maiseficientelinguagem de programação<br />É aquelaquevocêmaissabe<br />É aquelaqueresponde o problema “plataformaalvo + eficiênciacomputacional”<br />Engine<br />É aquelaquevocêmaissabe<br />É aquelaquevaiteoferecermaiorsuporte e menor tempo de aprendizado – e estámaispróxima do game quevocê tem emmente<br />É aquelaqueutiliza a linguagemquevocêmaissabe<br />
    11. 11. 20infinite loop<br />Game loop ou jogos são ilusões<br />É o laço onde todas as alterações do sistema que compõem um game, áudio, gráficos, física, etc., são atualizadas<br />Como o cinema, os jogos também precisam de, pelo menos, 24 quadros por segundo para dar a ilusão de interatividade.<br />
    12. 12. 21infinite loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManager->update())<br /> {<br />g_sceneManager->update();<br />entityManager->update();<br />psx->update();<br /> inputManager->update();<br /> }<br />Verifica se há eventos de cena: telas de game over, HUD, outros<br />Faz update da animação e posição das entidades com os resultados do frame anterior.<br />Resolve a física dos objetos, detecta colisão e atualiza valores das posições.<br />Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.<br />
    13. 13. 22infinite loop<br />Não reinvente a roda*<br />Padrões de código<br />Design Patterns<br />Bibliotecas e suas APIs<br />Game engines<br />*Do menos abrangente para o mais abrangente<br />
    14. 14. 1<br />Visãogeral<br />Game engine simples e seuscomponentes<br />Porqueutilizar<br />Precisarnãoprecisa, masajudabastante<br />Dividir e conquistar<br />Cadagerente no seuquadrado<br />Estruturageral<br />
    15. 15. Porqueutilizar<br />Precisarnãoprecisa… ou um breveconto de Engenharia de software<br />Custos: Time is money. Inclusive o seu tempo livre.<br />Divisão de trabalho: componentesindependentessendoproduzidosemseparado; boas práticas.<br />Sucesso: Você tem umaequipe, e agora!? <br />Foco no negócio.<br />
    16. 16. Dividir e conquistar<br />
    17. 17. Dividir e conquistar<br />Uma game engine mínima<br />Log<br />
    18. 18. 2<br />Desmembrando<br />Porque um componente de log salvarátuavida<br />Precisarnãoprecisa…<br />Mesmo se for um sistema simples com assert e printfjá vale.<br />Sofrimentopessoal: saída de std::cout no console deixava o sistemainativo. Melhorcuspirpara um arquivotexto.<br />Bibliotecasprofissionais: Log4j, glog<br />Cláusulas de throw / catch<br />
    19. 19. 3<br />Desmembrando<br />Recursos, umacolheitafeliz<br />Arquivos de configuração<br />Áudio, imagens, grafos de cenas, modelos 3D, etc<br />Tipos de arquivos<br />XML, Binários, DX Studio<br />
    20. 20. Tenhaseusarquivosestruturados de maneiraamigável<br />Componente de recursos<br />Responsávelpeloconsumootimizado de todososarquivosque a game engine utilizará. <br />Alimentação dos outroscomponentes. Emespecífico:<br />Preenchegerenciador de cenas com seusgrafos (“desenho” das cenas).<br />Conecta as entidades do game (personagens, cenário, etc) com suasrespectivasimagens e sons.<br />Inicializa a física com as configuraçõesescolhidas<br />Mapeiacontroles e teclaspara o funcionamento no jogo.<br />
    21. 21. O que é…<br />Scene Graph – Grafo de cena<br />http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html<br />
    22. 22. 4<br />Desmembrando<br />Input devices, nãoperca o controle<br />Troca de contextos<br />O gerenciadordeve ser capaz de alterar o mapping dos controlesconformecontexto<br />Polling / Listeners<br />Pode-se checar o estado do controle a cada frame ouficarnaescuta de um evento.<br />Independente do Hardware<br />Abstração via bibliotecasouwrapping<br />
    23. 23. Planejarpara o futuro<br />Input devices, jáperdendo o controle<br />WTF???????<br />MindControlHelmet<br />
    24. 24. Vocabulárioimportante<br />Essesdoismonstrossemprevoltam:<br />Polling<br />Listeners<br />
    25. 25. 5<br />Desmembrando<br />Audio, 1, 2, 3, SOM.<br />Semprerelegado, sempreumador de cabeçadepois.<br />O problemadasincronia<br />BGM vs. FX’s<br />BGM: eventos e troca de contexto<br />FX’s: listeners ou polling<br />BASS audio<br />
    26. 26. 21infinite loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManager->update())<br /> {<br />g_sceneManager->update();<br />entityManager->update();<br />psx->update();<br /> inputManager->update();<br /> }<br />E O SOM????<br />Verifica se há eventos de cena: telas de game over, HUD, outros<br />Faz update da animação e posição das entidades com os resultados do frame anterior.<br />Resolve a física dos objetos, detecta colisão e atualiza valores das posições.<br />Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.<br />
    27. 27. 6<br />Desmembrando<br />Renderização, o algoritmo do pintor<br />No final do dia, é atualizar a tela com as informaçõesobtidasaté o momentoportodososoutrosgerenciadores.<br />Algoritmo do pintor: resolvendo o problemadavisibilidade dos elementos 3D -> 2D; z-order.<br />Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.<br />
    28. 28. O quemudou entre frames?<br />Monstro do Polling atacanovamente<br />Polling<br />Checaosgerenciadores de cena e objetos<br />Renderizanaordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.<br />
    29. 29. Primeiramente o quevemprimeiro<br />Algoritmo do Pintor e Z-order<br />Objetos do fundosãodesenhadosprimeiramente.<br />Ordem de profundidade é respeitada. Objetos com menorcoordenada Z sãodesenhadosprimeiros. <br />Háredundâncianasáreaspintadas, masproblemadavisibilidade é resolvido. O resultado final contémsomenteosobjetosobserváveis.<br />
    30. 30. 3D<br />Microsoft Windows API was designed to provide software developers with direct access to low-level functions on PC peripherals - http://www.digitalhymnal.org/glossary_a-l.html#D<br />The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes – ogre3d.org/about<br />
    31. 31. 2D<br />Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. - http://www.libsdl.org/<br />SFML is a free multimedia C++ API that provides you low and high level access to graphics, input, audio, etc.; SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL – sfml-dev.org/features.php<br />
    32. 32. 7<br />Desmembrando<br />Cena, fazendouma<br />Cadafase é umacenacompleta e suaconfiguraçãogeral e relação entre oselementosque a compõemsãofeitosporarquivosexternos.<br />Listeners paraeventos<br />É umaponte entre o renderizador e o conjunto de elementos “vivos” (player e inimigos, porexemplo).<br />Biblioteca: nãoconheço, mas Ogre3d é baseadoemcenas.<br />
    33. 33. Volta do grafo de cena<br />Entendendo o porquê do arquivoexterno<br />Pensenos designers<br />Trabalhar com elementosconcretos é maisfácil do quetileset<br />Mesmo um XML de configuração é maisfácil de se consumir do que um ASCII<br />Se trabalhar com 3D, vaibateremgrafos de cena de umamaneiraououtra.<br />É intuitivo (sort of…)<br />
    34. 34. Entendi! Mas o quedeveconter?<br />Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memória<br />Conter um gerenciador de eventos, onde, a cada frame, seráchecado se devomudar de cena, entrarem um menu, etc<br />Transformaçõesdaprópriacena: rotação, câmera, iluminação.<br />Ponteiropara as entidades… próximo slide<br />
    35. 35. 8<br />Desmembrando<br />Entidades, tudo o quenão for cenárioousom<br />Todosos sprites em um sólugar<br />Ponte entre e o gerenciador de cena e o de física<br />É ótimoterumafábrica de entidades (a design pattern Factory)<br />
    36. 36. Criandobichos<br />A design pattern factoryemjogos<br />Listas de objetossãoutilizadasparateste de colisão e outroseventos. Se utilizarmosumaclasse base, é maisfácilmanipulá-los.<br />Tudoqueestánatelapode ser umaentidade, masnemtudoqueestánatela é a MESMA entidade. Umafábrica de componentes resolve o problema.<br />
    37. 37. 9<br />Desmembrando<br />Física, caindo de pau no Newton<br />Na verdade, umabiblioteca de física é um motor de animação dos elementosnatela<br />Nãocrieseusolver de física, mesmo se soubercomofazer um.<br />Mesmo se for 2D, vale a penausarfísicanewtoniana “de verdade”. Nãotenhamedo.<br />Bibliotecasprontas: Box2D, Havok, PhysX<br />
    38. 38. EDOs, EDPs, Êita<br />O problema das equaçõesdiferenciais<br />genericscalartransportequation<br />Ok, essa equação é para o movimento de um fluido, mas vale pra assustar. <br />A “classe” de equações utilizadas na programação de jogos é a mesma desta, e os problemas enfrentados na discretização também são os mesmos.<br />
    39. 39. Bibliotecas<br />Box2D<br />
    40. 40. !<br />Resumo<br />O game loop<br />Exemplo:<br />Pinta na tela o resultado final do frame atual<br />while (g_renderManager->update())<br /> {<br />g_sceneManager->update();<br />entityManager->update();<br />psx->update();<br /> inputManager->update();<br /> }<br />E O SOM E O AI E A REDE E ....????<br />Verifica se há eventos de cena: telas de game over, HUD, outros<br />Faz update da animação e posição das entidades com os resultados do frame anterior.<br />Resolve a física dos objetos, detecta colisão e atualiza valores das posições.<br />
    41. 41. !<br />Resumo<br />A game engine<br />Uma game engine mínima<br />Log<br />
    42. 42. !<br />There is a lot more…<br />O quefaltou<br />Inteligência artificial<br />Implementação, algoritmos e gerenciadores<br />Rede<br />Multiplayer online<br />Gravação / acesso<br />Engines/ SDKs<br />Númerosdemaisparamencionar<br />Pesquiseconformenecessidade, hardware e plataforma(s) de interesse<br />Estrutura de dados e algoritmos<br />De listasaté Quad/Octress<br />Apenasque … busquemconhecimento…<br />Quemnão tem o Bilú, que use o Google<br />
    43. 43. Referências<br />Game Engines<br />Game Engine Architecture, Jason Gregory<br />Game Engine Design and Implementation, Alan Thorn<br />Programação de jogos<br />Games programming, Alan Thorn<br />Beginning Game Programming,Hattan & Sikora<br />Game Code Complete, Mike McShaffry<br />www.gamedev.net<br />Data Structures and Algorithms for game Developers, Alan Sherrod<br />Design Patterns<br />Head First Design Patterns,Freeman & Freeman<br />Design Patterns,GoF<br />Física<br />www.box2d.org<br />3D Math Primer for Graphics and Game Development, Fletcher Dunn<br />

    ×