SlideShare uma empresa Scribd logo
Programação de Jogos: visãogeralparainiciantesdacobrinhaaoBioshockem 50 min… Fabio Fonseca – catavento.art.br
DisclaimerEstaapresentaçã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...).
MetaEntender o Game Loop Entender o que é e quaissãooscomponentes de uma game engine
VS.
Antes de começar, o quevocêprecisa saber?ProgramarPode ser POO ouestruturadaFísica e MatemáticaSaber aquela do cursinhoajudahorrores…Google e Fórunspontov.com.br, gamedev.net, box2d.net
Let’s begin the operation!2D ou 3D, escolhendo o número de dimensõesQual o problema a ser resolvido e paraqualplataforma? Simples e original vs. complexo e padrãoTiveumaidéia! Voufazer o Resident Evil 7!O número de dimensõesnãoimportadependendodatuaescolha. Complexo e originalSe Δt -> ∞ ...
Gentleman, start your enginesSurge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo.Mods: a separaçãocriadapela ID permitiuque gamers individuais e pequenosgruposcriassemjogosbaseadosnaestrutura de Doom.Upgrade: Unreal, Quake III com linguagenspróprias de script.“Data-driven architecture”: Teoricamente a regra de jogo e a parte lógicaficariamseparadas dos outroselementos, permitindoqueváriosjogos do mesmoestilofossemfeitos a partirdamesmaplataforma.Masnãoháseparaçãoclaranem entre elementosnem entre o que é um jogo e o que é a engine.“Tudoacontecenaperiferia. Brigas, mortesnaperiferia” – Ratos de porão
Gentleman, start yourengines“Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as thefoundation for manydifferente games without major modification” – Jason Gregory, Game Engine Design Architecture
What’sinside?Específico do jogoHUD, efeitos visuaisÁudio e redeGerenciador de física eanimação de corposRenderização e gerenciador de cenasInicialização e configuraçãoAbstração do SO e SDKsespecíficas para cada sistemaHardware e SO.
Depois, as ferramentasO eterno debate sobrelinguagem de programação e sobrequal engine utilizarA melhor e maiseficientelinguagem de programaçãoÉ aquelaquevocêmaissabeÉ aquelaqueresponde o problema “plataformaalvo + eficiênciacomputacional”EngineÉ aquelaquevocêmaissabeÉ aquelaquevaiteoferecermaiorsuporte e menor tempo de aprendizado – e estámaispróxima do game quevocê tem emmenteÉ aquelaqueutiliza a linguagemquevocêmaissabe
20infinite loopGame loop ou jogos são ilusõesÉ o laço onde todas as alterações do sistema que compõem um game, áudio, gráficos, física, etc., são atualizadasComo o cinema, os jogos também precisam de, pelo menos, 24 quadros por segundo para dar a ilusão de interatividade.
21infinite loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update())    {g_sceneManager->update();entityManager->update();psx->update();	   inputManager->update();    }Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
22infinite loopNão reinvente a roda*Padrões de códigoDesign PatternsBibliotecas e suas APIsGame engines*Do menos abrangente para o mais abrangente
1VisãogeralGame engine simples e seuscomponentesPorqueutilizarPrecisarnãoprecisa, masajudabastanteDividir e conquistarCadagerente no seuquadradoEstruturageral
PorqueutilizarPrecisarnãoprecisa… ou um breveconto de Engenharia de softwareCustos: Time is money. Inclusive o seu tempo livre.Divisão de trabalho: componentesindependentessendoproduzidosemseparado; boas práticas.Sucesso: Você tem umaequipe, e agora!? Foco no negócio.
Dividir e conquistar
Dividir e conquistarUma game engine mínimaLog
2DesmembrandoPorque um componente de log salvarátuavidaPrecisarnãoprecisa…Mesmo se for um sistema simples com assert e printfjá vale.Sofrimentopessoal: saída de std::cout no console deixava o sistemainativo. Melhorcuspirpara um arquivotexto.Bibliotecasprofissionais: Log4j, glogCláusulas de throw / catch
3DesmembrandoRecursos, umacolheitafelizArquivos de configuraçãoÁudio, imagens, grafos de cenas, modelos 3D, etcTipos de arquivosXML, Binários, DX Studio
Tenhaseusarquivosestruturados de maneiraamigávelComponente de recursosResponsávelpeloconsumootimizado de todososarquivosque a game engine utilizará. Alimentação dos outroscomponentes. Emespecífico:Preenchegerenciador de cenas com seusgrafos (“desenho” das cenas).Conecta as entidades do game (personagens, cenário, etc) com suasrespectivasimagens e sons.Inicializa a física com as configuraçõesescolhidasMapeiacontroles e teclaspara o funcionamento no jogo.
O que é…Scene Graph – Grafo de cenahttp://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html
4DesmembrandoInput devices, nãoperca o controleTroca de contextosO gerenciadordeve ser capaz de alterar o mapping dos controlesconformecontextoPolling / ListenersPode-se checar o estado do controle a cada frame ouficarnaescuta de um evento.Independente do HardwareAbstração via bibliotecasouwrapping
Planejarpara o futuroInput devices, jáperdendo o controleWTF???????MindControlHelmet
VocabulárioimportanteEssesdoismonstrossemprevoltam:PollingListeners
5DesmembrandoAudio, 1, 2, 3, SOM.Semprerelegado, sempreumador de cabeçadepois.O problemadasincroniaBGM vs. FX’sBGM: eventos e troca de contextoFX’s: listeners ou pollingBASS audio
21infinite loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update())    {g_sceneManager->update();entityManager->update();psx->update();	   inputManager->update();    }E O SOM????Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
6DesmembrandoRenderização, o algoritmo do pintorNo final do dia, é atualizar a tela com as informaçõesobtidasaté o momentoportodososoutrosgerenciadores.Algoritmo do pintor: resolvendo o problemadavisibilidade dos elementos 3D -> 2D; z-order.Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.
O quemudou entre frames?Monstro do Polling atacanovamentePollingChecaosgerenciadores de cena e objetosRenderizanaordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.
Primeiramente o quevemprimeiroAlgoritmo do Pintor e Z-orderObjetos do fundosãodesenhadosprimeiramente.Ordem de profundidade é respeitada. Objetos com menorcoordenada Z sãodesenhadosprimeiros. Háredundâncianasáreaspintadas, masproblemadavisibilidade é resolvido. O resultado final contémsomenteosobjetosobserváveis.
3DMicrosoft 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#DThe 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
2DSimple 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/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
7DesmembrandoCena, fazendoumaCadafase é umacenacompleta e suaconfiguraçãogeral e relação entre oselementosque a compõemsãofeitosporarquivosexternos.Listeners paraeventosÉ umaponte entre o renderizador e o conjunto de elementos “vivos” (player e inimigos, porexemplo).Biblioteca: nãoconheço, mas Ogre3d é baseadoemcenas.
Volta do grafo de cenaEntendendo o porquê do arquivoexternoPensenos designersTrabalhar com elementosconcretos é maisfácil do quetilesetMesmo um XML de configuração é maisfácil de se consumir do que um ASCIISe trabalhar com 3D, vaibateremgrafos de cena de umamaneiraououtra.É intuitivo (sort of…)
Entendi! Mas o quedeveconter?Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memóriaConter um gerenciador de eventos, onde, a cada frame, seráchecado se devomudar de cena, entrarem um menu, etcTransformaçõesdaprópriacena: rotação, câmera, iluminação.Ponteiropara as entidades… próximo slide
8DesmembrandoEntidades, tudo o quenão for cenárioousomTodosos sprites em um sólugarPonte entre e o gerenciador de cena e o de físicaÉ ótimoterumafábrica de entidades (a design pattern Factory)
CriandobichosA design pattern factoryemjogosListas de objetossãoutilizadasparateste de colisão e outroseventos. Se utilizarmosumaclasse base, é maisfácilmanipulá-los.Tudoqueestánatelapode ser umaentidade, masnemtudoqueestánatela é a MESMA entidade. Umafábrica de componentes resolve o problema.
9DesmembrandoFísica, caindo de pau no NewtonNa verdade, umabiblioteca de física é um motor de animação dos elementosnatelaNãocrieseusolver de física, mesmo se soubercomofazer um.Mesmo se for 2D, vale a penausarfísicanewtoniana “de verdade”. Nãotenhamedo.Bibliotecasprontas: Box2D, Havok, PhysX
EDOs, EDPs, ÊitaO problema das equaçõesdiferenciaisgenericscalartransportequationOk, essa equação é para o movimento de um fluido, mas vale pra assustar. 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.
BibliotecasBox2D
!ResumoO game loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update())    {g_sceneManager->update();entityManager->update();psx->update();	   inputManager->update();    }E O SOM E O AI E A REDE E ....????Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.
!ResumoA game engineUma game engine mínimaLog
!There is a lot more…O quefaltouInteligência artificialImplementação, algoritmos e gerenciadoresRedeMultiplayer onlineGravação / acessoEngines/ SDKsNúmerosdemaisparamencionarPesquiseconformenecessidade, hardware e plataforma(s) de interesseEstrutura de dados e algoritmosDe listasaté Quad/OctressApenasque … busquemconhecimento…Quemnão tem o Bilú, que use o Google
ReferênciasGame EnginesGame Engine Architecture, Jason GregoryGame Engine Design and Implementation, Alan ThornProgramação de jogosGames programming, Alan ThornBeginning Game Programming,Hattan & SikoraGame Code Complete, Mike McShaffrywww.gamedev.netData Structures and Algorithms for game Developers, Alan SherrodDesign PatternsHead First Design Patterns,Freeman & FreemanDesign Patterns,GoFFísicawww.box2d.org3D Math Primer for Graphics and Game Development, Fletcher Dunn

Mais conteúdo relacionado

PPTX
Game programming
PPTX
Advanced topics for game developers
PDF
Introdução aos Kits Lego NXT
PPTX
NXT Lego Mindstorm - Sensor de Luz
PPTX
Programação ev3
ODP
Robot Lego programado em Java
PDF
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
PDF
User guide lego mindstorms ev3 10 all pt
Game programming
Advanced topics for game developers
Introdução aos Kits Lego NXT
NXT Lego Mindstorm - Sensor de Luz
Programação ev3
Robot Lego programado em Java
Programação de Kits Lego NXT usando Linguagem Gráfica Nativa (ou NXT-G)
User guide lego mindstorms ev3 10 all pt

Mais procurados (20)

PDF
Introdução à Programação com Robôs Lego
PDF
Apostila do game maker 8.0 (português)
PPTX
Apresentação lego mindstorms
PDF
PDF
Capacitação nxt
PPTX
Criação de jogos game maker - férias
PPT
Inteligência Artificial em Jogos
PPT
Técnicas de Prototipação II - LEGO Aula 04
PDF
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
PDF
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
PDF
Amostra robos lego
PDF
Computação gráfica
PPTX
INdT Mobile Labs - Sparta
PPTX
PPT
Curso Dia 02
PPTX
Lego Mindstorms.
PDF
Algoritmos de jogos
PDF
Painel de Controle Windows XP
PDF
Hexxagon Game
Introdução à Programação com Robôs Lego
Apostila do game maker 8.0 (português)
Apresentação lego mindstorms
Capacitação nxt
Criação de jogos game maker - férias
Inteligência Artificial em Jogos
Técnicas de Prototipação II - LEGO Aula 04
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Amostra robos lego
Computação gráfica
INdT Mobile Labs - Sparta
Curso Dia 02
Lego Mindstorms.
Algoritmos de jogos
Painel de Controle Windows XP
Hexxagon Game
Anúncio

Semelhante a Game programming (20)

PPTX
INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS DIGITAIS.pptx
PPT
Arquitetura e Motores de Jogos Game Engine (motor ou framework)
PPTX
Palestra Introdução ao Game Design
PPSX
Júlio Pescuite - Advanced Topics for Game Developers
PDF
Guia xna
PPTX
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
PDF
Slide blender 3 d apresentação
PDF
Curso Unity3D
PDF
Desenvolvimento de jogos para MSX
PPTX
Desenvolvimento De Jogos Na Plataforma Xna
PDF
FLTK Summer Course - Part VIII - Eighth Impact
PPT
Animação nos Videojogos
PDF
Quasi-engine: Desenvolvendo jogos em QML
PDF
ISD 2015 - Interfaces de Games para Diferentes Telas
PPT
Comparativo entre Engines de Jogos em 3d
PPT
Palestra Game Design
PDF
Projeto jogo da-velha
PPT
Palestra - Introdução ao desenvolvimento de Jogos
PDF
Frameworks Formais de Game Design.
PPTX
Defesa TC V1.2.1
INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS DIGITAIS.pptx
Arquitetura e Motores de Jogos Game Engine (motor ou framework)
Palestra Introdução ao Game Design
Júlio Pescuite - Advanced Topics for Game Developers
Guia xna
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
Slide blender 3 d apresentação
Curso Unity3D
Desenvolvimento de jogos para MSX
Desenvolvimento De Jogos Na Plataforma Xna
FLTK Summer Course - Part VIII - Eighth Impact
Animação nos Videojogos
Quasi-engine: Desenvolvendo jogos em QML
ISD 2015 - Interfaces de Games para Diferentes Telas
Comparativo entre Engines de Jogos em 3d
Palestra Game Design
Projeto jogo da-velha
Palestra - Introdução ao desenvolvimento de Jogos
Frameworks Formais de Game Design.
Defesa TC V1.2.1
Anúncio

Game programming

  • 1. Programação de Jogos: visãogeralparainiciantesdacobrinhaaoBioshockem 50 min… Fabio Fonseca – catavento.art.br
  • 2. DisclaimerEstaapresentaçã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...).
  • 3. MetaEntender o Game Loop Entender o que é e quaissãooscomponentes de uma game engine
  • 4. VS.
  • 5. Antes de começar, o quevocêprecisa saber?ProgramarPode ser POO ouestruturadaFísica e MatemáticaSaber aquela do cursinhoajudahorrores…Google e Fórunspontov.com.br, gamedev.net, box2d.net
  • 6. Let’s begin the operation!2D ou 3D, escolhendo o número de dimensõesQual o problema a ser resolvido e paraqualplataforma? Simples e original vs. complexo e padrãoTiveumaidéia! Voufazer o Resident Evil 7!O número de dimensõesnãoimportadependendodatuaescolha. Complexo e originalSe Δt -> ∞ ...
  • 7. Gentleman, start your enginesSurge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo.Mods: a separaçãocriadapela ID permitiuque gamers individuais e pequenosgruposcriassemjogosbaseadosnaestrutura de Doom.Upgrade: Unreal, Quake III com linguagenspróprias de script.“Data-driven architecture”: Teoricamente a regra de jogo e a parte lógicaficariamseparadas dos outroselementos, permitindoqueváriosjogos do mesmoestilofossemfeitos a partirdamesmaplataforma.Masnãoháseparaçãoclaranem entre elementosnem entre o que é um jogo e o que é a engine.“Tudoacontecenaperiferia. Brigas, mortesnaperiferia” – Ratos de porão
  • 8. Gentleman, start yourengines“Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as thefoundation for manydifferente games without major modification” – Jason Gregory, Game Engine Design Architecture
  • 9. What’sinside?Específico do jogoHUD, efeitos visuaisÁudio e redeGerenciador de física eanimação de corposRenderização e gerenciador de cenasInicialização e configuraçãoAbstração do SO e SDKsespecíficas para cada sistemaHardware e SO.
  • 10. Depois, as ferramentasO eterno debate sobrelinguagem de programação e sobrequal engine utilizarA melhor e maiseficientelinguagem de programaçãoÉ aquelaquevocêmaissabeÉ aquelaqueresponde o problema “plataformaalvo + eficiênciacomputacional”EngineÉ aquelaquevocêmaissabeÉ aquelaquevaiteoferecermaiorsuporte e menor tempo de aprendizado – e estámaispróxima do game quevocê tem emmenteÉ aquelaqueutiliza a linguagemquevocêmaissabe
  • 11. 20infinite loopGame loop ou jogos são ilusõesÉ o laço onde todas as alterações do sistema que compõem um game, áudio, gráficos, física, etc., são atualizadasComo o cinema, os jogos também precisam de, pelo menos, 24 quadros por segundo para dar a ilusão de interatividade.
  • 12. 21infinite loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update()) {g_sceneManager->update();entityManager->update();psx->update(); inputManager->update(); }Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
  • 13. 22infinite loopNão reinvente a roda*Padrões de códigoDesign PatternsBibliotecas e suas APIsGame engines*Do menos abrangente para o mais abrangente
  • 14. 1VisãogeralGame engine simples e seuscomponentesPorqueutilizarPrecisarnãoprecisa, masajudabastanteDividir e conquistarCadagerente no seuquadradoEstruturageral
  • 15. PorqueutilizarPrecisarnãoprecisa… ou um breveconto de Engenharia de softwareCustos: Time is money. Inclusive o seu tempo livre.Divisão de trabalho: componentesindependentessendoproduzidosemseparado; boas práticas.Sucesso: Você tem umaequipe, e agora!? Foco no negócio.
  • 17. Dividir e conquistarUma game engine mínimaLog
  • 18. 2DesmembrandoPorque um componente de log salvarátuavidaPrecisarnãoprecisa…Mesmo se for um sistema simples com assert e printfjá vale.Sofrimentopessoal: saída de std::cout no console deixava o sistemainativo. Melhorcuspirpara um arquivotexto.Bibliotecasprofissionais: Log4j, glogCláusulas de throw / catch
  • 19. 3DesmembrandoRecursos, umacolheitafelizArquivos de configuraçãoÁudio, imagens, grafos de cenas, modelos 3D, etcTipos de arquivosXML, Binários, DX Studio
  • 20. Tenhaseusarquivosestruturados de maneiraamigávelComponente de recursosResponsávelpeloconsumootimizado de todososarquivosque a game engine utilizará. Alimentação dos outroscomponentes. Emespecífico:Preenchegerenciador de cenas com seusgrafos (“desenho” das cenas).Conecta as entidades do game (personagens, cenário, etc) com suasrespectivasimagens e sons.Inicializa a física com as configuraçõesescolhidasMapeiacontroles e teclaspara o funcionamento no jogo.
  • 21. O que é…Scene Graph – Grafo de cenahttp://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html
  • 22. 4DesmembrandoInput devices, nãoperca o controleTroca de contextosO gerenciadordeve ser capaz de alterar o mapping dos controlesconformecontextoPolling / ListenersPode-se checar o estado do controle a cada frame ouficarnaescuta de um evento.Independente do HardwareAbstração via bibliotecasouwrapping
  • 23. Planejarpara o futuroInput devices, jáperdendo o controleWTF???????MindControlHelmet
  • 25. 5DesmembrandoAudio, 1, 2, 3, SOM.Semprerelegado, sempreumador de cabeçadepois.O problemadasincroniaBGM vs. FX’sBGM: eventos e troca de contextoFX’s: listeners ou pollingBASS audio
  • 26. 21infinite loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update()) {g_sceneManager->update();entityManager->update();psx->update(); inputManager->update(); }E O SOM????Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
  • 27. 6DesmembrandoRenderização, o algoritmo do pintorNo final do dia, é atualizar a tela com as informaçõesobtidasaté o momentoportodososoutrosgerenciadores.Algoritmo do pintor: resolvendo o problemadavisibilidade dos elementos 3D -> 2D; z-order.Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.
  • 28. O quemudou entre frames?Monstro do Polling atacanovamentePollingChecaosgerenciadores de cena e objetosRenderizanaordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.
  • 29. Primeiramente o quevemprimeiroAlgoritmo do Pintor e Z-orderObjetos do fundosãodesenhadosprimeiramente.Ordem de profundidade é respeitada. Objetos com menorcoordenada Z sãodesenhadosprimeiros. Háredundâncianasáreaspintadas, masproblemadavisibilidade é resolvido. O resultado final contémsomenteosobjetosobserváveis.
  • 30. 3DMicrosoft 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#DThe 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
  • 31. 2DSimple 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/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
  • 32. 7DesmembrandoCena, fazendoumaCadafase é umacenacompleta e suaconfiguraçãogeral e relação entre oselementosque a compõemsãofeitosporarquivosexternos.Listeners paraeventosÉ umaponte entre o renderizador e o conjunto de elementos “vivos” (player e inimigos, porexemplo).Biblioteca: nãoconheço, mas Ogre3d é baseadoemcenas.
  • 33. Volta do grafo de cenaEntendendo o porquê do arquivoexternoPensenos designersTrabalhar com elementosconcretos é maisfácil do quetilesetMesmo um XML de configuração é maisfácil de se consumir do que um ASCIISe trabalhar com 3D, vaibateremgrafos de cena de umamaneiraououtra.É intuitivo (sort of…)
  • 34. Entendi! Mas o quedeveconter?Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memóriaConter um gerenciador de eventos, onde, a cada frame, seráchecado se devomudar de cena, entrarem um menu, etcTransformaçõesdaprópriacena: rotação, câmera, iluminação.Ponteiropara as entidades… próximo slide
  • 35. 8DesmembrandoEntidades, tudo o quenão for cenárioousomTodosos sprites em um sólugarPonte entre e o gerenciador de cena e o de físicaÉ ótimoterumafábrica de entidades (a design pattern Factory)
  • 36. CriandobichosA design pattern factoryemjogosListas de objetossãoutilizadasparateste de colisão e outroseventos. Se utilizarmosumaclasse base, é maisfácilmanipulá-los.Tudoqueestánatelapode ser umaentidade, masnemtudoqueestánatela é a MESMA entidade. Umafábrica de componentes resolve o problema.
  • 37. 9DesmembrandoFísica, caindo de pau no NewtonNa verdade, umabiblioteca de física é um motor de animação dos elementosnatelaNãocrieseusolver de física, mesmo se soubercomofazer um.Mesmo se for 2D, vale a penausarfísicanewtoniana “de verdade”. Nãotenhamedo.Bibliotecasprontas: Box2D, Havok, PhysX
  • 38. EDOs, EDPs, ÊitaO problema das equaçõesdiferenciaisgenericscalartransportequationOk, essa equação é para o movimento de um fluido, mas vale pra assustar. 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.
  • 40. !ResumoO game loopExemplo:Pinta na tela o resultado final do frame atualwhile (g_renderManager->update()) {g_sceneManager->update();entityManager->update();psx->update(); inputManager->update(); }E O SOM E O AI E A REDE E ....????Verifica se há eventos de cena: telas de game over, HUD, outrosFaz update da animação e posição das entidades com os resultados do frame anterior.Resolve a física dos objetos, detecta colisão e atualiza valores das posições.
  • 41. !ResumoA game engineUma game engine mínimaLog
  • 42. !There is a lot more…O quefaltouInteligência artificialImplementação, algoritmos e gerenciadoresRedeMultiplayer onlineGravação / acessoEngines/ SDKsNúmerosdemaisparamencionarPesquiseconformenecessidade, hardware e plataforma(s) de interesseEstrutura de dados e algoritmosDe listasaté Quad/OctressApenasque … busquemconhecimento…Quemnão tem o Bilú, que use o Google
  • 43. ReferênciasGame EnginesGame Engine Architecture, Jason GregoryGame Engine Design and Implementation, Alan ThornProgramação de jogosGames programming, Alan ThornBeginning Game Programming,Hattan & SikoraGame Code Complete, Mike McShaffrywww.gamedev.netData Structures and Algorithms for game Developers, Alan SherrodDesign PatternsHead First Design Patterns,Freeman & FreemanDesign Patterns,GoFFísicawww.box2d.org3D Math Primer for Graphics and Game Development, Fletcher Dunn

Notas do Editor

  • #2: 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.
  • #11: 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.
  • #30: 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.