Octopus Team – desenvolvimento de jogos independentes

Você quer começar a trabalhar com desenvolvimento de games, mas em um mercado brasileiro em crescimento e com muita concorrência, você não consegue experiência nesta área. O que fazer então?

A melhor maneira de conseguir experiência em desenvolvimento de games e montar seu portfólio é fazer jogos, mas isso pode limitar uma pessoa sozinha, pois até mesmo o desenvolvimento de um jogo simples completo (menu, animações, som, efeitos, programação, game design, etc.) é um grande trabalho multidisciplinar, exigindo que você tenha que aprender coisas que não são o seu foco.

Octopus Team

Neste caso, o melhor é criar ou participar de um grupo de desenvolvimento de jogos independentes. Muitos grupos são formandos por estudantes e entusiastas, que querem apenas aprender mais coisas em um ambiente colaborativo e assim poder focar no desenvolvimento de suas habilidades, como programação ou modelagem por exemplo.

Um grupo de desenvolvimento de jogos independentes pode se tornar uma empresa após conseguir um bom entrosamento, conhecimento e experiência. Porém, inicialmente, ganhar dinheiro com jogos não deve ser a motivação de um grupo novo, você deve fazer jogos por que gosta.

Para poder aumentar meu portfólio e ganhar experiência como programador e game designer eu entrei para um grupo de desenvolvimento de jogos independentes, o Octopus Team, liderada pelo Márcio Vinícius Mello de Freitas. Eu encontrei este grupo no fórum da UniDev, entrei em contato com o Márcio, falei das minhas experiências e objetivos e fui aceito. É nos fóruns de desenvolvimento de games que estes grupos são formados e também procuram novos membros. Outro fórum muito bom é o PDJ.

Atualmente estamos trabalhando em um jogo de estratégia em 3D, utilizando o XNA para desenvolver. O projeto já estava iniciado quando entrei neste grupo, então muita coisa estava definida, mas mesmo assim tive liberdade para dar novas idéias. Quando o projeto estiver mais avançado falarei mais aqui sobre ele.

Aproveitando o post, a Octopus Team está procurando uma pessoa para modelar personagens do nosso jogo. Não precisa ter experiência, até por que o grupo serve para aprender, mas é necessário que saiba o básico de modelagem de personagens e animação. Interessados entrar em contato pelo e-mail contato@octopusteam.com.br .

Esboço do Cenário do Jogo

Esboço do Cenário do Jogo

programação de jogos: main loop

Antes de começar a estudar desenvolvimentos de games ano passado eu não imaginava o que realmente era um jogo, do ponto de vista da programação. Quem está acostumado com a estrutura de um sistema, não consegue imaginar muito bem que tipo de programa é um jogo sem estudar sua estrutura básica.

Basicamente, um jogo é um programa em loop infinito. Fiquei surpreso nas primeiras aulas da pós-graduação quando percebi isso. Independente do tipo do jogo, todos têm isso em comum, chamado de Main Loop ou Game Loop, que é responsável por controlar tudo no jogo.

Game Loop

Fonte: http://www.ronkes.nl/blog/?2005-07-21-gameengine

A principal responsabilidade do Main Loop é receber entradas, atualizar o status do jogo e produzir saídas correspondentes, tudo isso em um ciclo contínuo, praticamente infinito. Neste ponto existe uma diferença entre o Main Loop de um jogo de PC e um jogo de console: no PC o Main Loop é finalizado quando o jogar fecha o jogo; em alguns Consoles o Main Loop é praticamente infinito, pois não existe um “sair do jogo”; em Consoles como o Nintendo Wii, é possível sair do jogo e voltar para a tela inicial do Wii, finalizando o Main Loop do jogo.

Outra responsabilidade do Main Loop, que muitos iniciantes esquecem, é o Frame Rate. A taxa de quadros por segundo em que o jogo roda é importante por que sem este tipo de controle o jogo não fica sincronizado. Em alguns casos, o Frame Rate é escondido do programador e utiliza um valor default, como no XNA. Em outros, ele é obrigatório para o jogo rodar, como na SDL.

O Frame Rate pode ser definido com um número que o programa deve esperar até executar o Main Loop novamente. Porém, não é simplesmente fazendo isso que o programa irá executar aquele mesmo rate sempre. Dependendo do consumo de processamento e memória, um loop pode ser mais lento do que outro, e utilizando um número fixo, o rate sempre será diferente, provocando lags para o jogador.

Uma solução para este problema é descontar do Frame Rate o tempo em o Main Loop gastou em sua execução, assim, o jogo rodará sempre no mesmo frame. Por exemplo: se o Frame Rate é 30, e o Main Loop gastou 3, o programa deve aguardar 27 (30 – 3) para executar novamente o Main Loop. Sem este controle, o programa iria aguardar 33 (30 + 3) para ser executado novamente, lembrando que o tempo do Main Loop pode variar sempre e o Frame Rate é uma constante. O diagrama abaixo ilustra o funcionamento do Main Loop Fixed Rate:

Main Loop Fixed Rate

Fixed Rate - Fonte: NAKAMURA, Ricardo. Técnicas de Programação de Games.

O que escrevi neste post é algo que considero bem básico para a programação de um game, e acho que pode ser muito útil para iniciantes. Apesar de ser básico, a partir disso é possível procurar mais informações na internet, ou perguntar aqui mesmo qualquer dúvida sobre o assunto.

como montar um grid 3D com XNA

Uma das coisas que tenho estudando bastante ultimamente, além da Unity e de C++, é o XNA. Por ser algo gratuito e bem difundido pela Microsoft, é bem fácil de encontrar ajuda na internet sobre qualquer coisa que você quer fazer ou algum erro estranho, principalmente no fórum oficial do XNA Creators Club, além dos exemplos e tutoriais que podem ser encontrados neste site. Mesmo assim, sempre existe aquele detalhe que você não consegue encontrar ou que simplesmente não funciona do jeito que deveria.

Isto aconteceu comigo quando estava tentando montar um Grid em 3D com XNA. Eu queria criar um método para gerar um Grid dinâmico, com o número de linhas de colunas que seriam recebidos por parâmetros. Encontrei diversas soluções, porém nenhuma funcionou do jeito que eu queria, ou não consegui adaptar para o que eu precisava. Assim, tive que estudar como fazer desenho de pontos e retas em 3D e criar meu próprio método para isto.

Primeiro eu tinha pensando em desenhar uma célula, e depois utilizar um conjunto de células em uma classe Grid. Esta idéia não deu muito certo, pois ficaria bem complicado gerenciar o desenho de cada célula. A minha solução final ficou mais simples: criei uma classe Grid onde eu traço retas em pontos que formam o meu Grid, de acordo com o número de linhas e colunas. Abaixo trecho do código responsável por montar o Grid:

Código do Grid no XNA

Código do Grid no XNA

Após montar o Grid em uma variável VertexPositionColor, basta utilizar o método DrawUserPrimitives() desenhando uma LineList. Para visualizar o Grid é necessário outras coisas além disso, como definir uma matrix de View e uma de Projeção, que são coisas bem mais básicas do que a lógica de desenhar um Grid. Além do XNA Creators Club, existe o XNA MSDN Library da Microsoft, que também é muito útil para aprender.

Desenho do Grid em 3D

Desenho do Grid em 3D

Desenho do Grid em 3D

Desenho do Grid em 3D

Espero que isto seja útil para quem está aprendendo XNA. Qualquer dúvida é só perguntar nos comentários! 

Panorama theme by Themocracy