A
Blender Game Engine é uma engine utilizada para o desenvolvimento de aplicações 3D interativas, utilizada principalmente para o desenvolvimento de jogos. Por ser integrada ao
Blender, software famoso de modelagem 3D e de criação de animações, é possível modelar todo o game através do Blender e então adicionar elementos lógicos que permitam que os modelos se comportem como jogos.
Os principais elementos da Blender Game Engine (chamada a partir daqui de BGE) são os blocos lógicos (originalmente, logic bricks). Os blocos lógicos são subdivididos em: sensores, controladores e atuadores.
Através dos sensores são detectadas alterações nos ambientes. Sejam elas realizadas pelo jogador, pelo próprio ambiente ou pelo tempo. Os controladores recebem pulsos positivos dos sensores para cada alteração no ambiente e então atuam como portas lógicas quando recebem sinais elétricos. Os controladores podem ser dos tipos: AND, OR, XOR, NAND, NOR, XNOR, de Expressões e Python. Quando a saída gerada pelo controlador é positiva, atuadores podem gerar alguma ação. Os atuadores reagem modificando então algum objeto ou propriedade do ambiente.
Sensores
Os sensores detectam os eventos gerados durante o jogo. A BGE possui alguns sensores que cobrem diversas funcionalidades necessárias para o desenvolvimento de jogos. Os sensores disponíveis na BGE são: Always Sensor, Delay Sensor, Keyboard Sensor, Mouse Sensor, Touch Sensor, Collision Sensor, Near Sensor, Radar Sensor, Property Sensor, Random Sensor, Ray Sensor, Message Sensor, Joystick Sensor e Actuator Sensor.
- Always Sensor: é usado para gerar eventos a todo instante.
- Delay Sensor: atrasa a reação a algum evento. Útil quando outra tarefa precisa ser realizada antes de algum evento.
- Keyboard Sensor: detecta entrada do teclado. A entrada pode ser gravada como uma propriedade. Útil para jogos onde o teclado é o principal dispositivo.
Ex.: Ao teclar 'R' o personagem recarrega a arma. Essa situação poderia ser modelada com um Keyboard Sensor associado a tecla 'R'. Que poderia então estar conectado a um controlador AND e a um atuador do tipo Property que adicionaria munição a arma do personagem se houvesse munição reserva.
- Mouse Sensor: detecta entrada do mouse. O controlador consiste apenas de uma lista de tipos de eventos de mouse, podendo ser o evento: botão esquerdo, botão central, botão direito, scroll up, scroll down, movimento, mouse sobre objeto, mouse sobre qualquer objeto.
- Touch Sensor: envia um pulso positivo quando um objeto está em contato com outro objeto.
- Collision Sensor: funciona como o Touch sensor, mas pode também filtrar alguma propriedade.
- Near Sensor: detecta objetos que estão dentro de uma distância pré-especificada.
Ex.: Em jogos de espionagem poderia ser utilizado para modelar que o personagem está em uma área de conhecimento dos inimigos.
- Radar Sensor: funciona como Near Sensor, mas apenas dentro de um ângulo em um eixo.
- Property Sensor: detecta mudanças nas propriedades de um objeto. Possui quatro modos: igual, não igual, intervalo e alterado.
Ex.: Poderia ser utilizado para informar ao jogador que o tempo para se realizar alguma tarefa está se esgotando.
- Random Sensorv: gera pulsos aleatórios. É necessário fornecer uma semente como ocorre em muitas linguagens de programação. O 0 não é randômico para testes e depuração.
- Ray Sensor: lançar um raio e detecta se o raio acertou algo.
- Message Sensor: usado para enviar texto ou valores de propriedades. Envia um pulso positivo por mensagem.
- Joystick Sensor: detecta eventos de joystick. Esses eventos são necessários para quem deseja criar um jogo com outra opção além de mouse e teclado.
- Actuator Sensor: detecta quando um atuador com nome especificado no campo Act é ativado. Torna possível a geração de eventos cíclicos.
Ex.: Em um jogo de futebol, o time adversário poderia se comportar de maneira mais agressiva após sofrer um gol.
Controladores
Os controladores atribuem lógica aos pulsos obtidos por sensores.
Os controladores disponíveis no Blender são: AND, OR, XOR, NAND, NOR, XNOR, Expressões e Python.
Controladores lógicos:
A tabela a seguir, obtida na
Blender Wiki, oferece uma visão de como os pulsos são manipulados a partir de operações da lógica matemática.
Sensores Positivos== Controlador==============
==============AND OR XOR NAND NOR XNOR
Nenhum=========F F F V V V
Um============F V V V F F
Múltiplos, nem todos=F V F V F V
Todos ==========V V F F F V
A coluna 'Sensores Positivos' demonstra a entrada do controlador, podendo ser: nenhum sinal positivo, um sinal positivo, múltiplos sinais positivos (mas nem todos) e todos os sinais positivos. Os controladores estão divididos e para cada 1 dos 4 tipos de entrada é gerada uma saída apropriada.
Exemplos:
- Ao obter todos as entradas positivas, um controlador AND gera uma saída V (Verdadeira/Positiva).
- Ao obter um sinal positivo de entrada (e apenas um), um controlador OR gera uma saída V (Verdadeira/Positiva).
- Ao obter apenas um sinal positivo na entrada (de muitos), um controlador AND gera uma saída F (Falsa/Negativa).
Nas situações acima especificadas, os exemplos a. e b. acionariam um atuador; enquanto a opção c. não acionaria.
Além dos controladores já mencionados, existem dois tipos de controladores 'especiais': Expression Controller e Python Controller.
Expression Controller:
Um controlador que é muito funcional em alguns casos. Pode além de receber o pulso de um sinal, verificar uma propriedade do objeto.
Controlador Python:
Controlador que checa a entrada usando um script programado em Python ou algum outro arquivo contendo código Python. Funcionam em dois modos: script ou módulo. Ambos podem ser escritos em editores de texto e armazenados dentro de um arquivo .blend, ou podem ser scripts externos.
- Script Mode: o controlador é linkado ao script e o script é executado completamente antes de a lógica prosseguir. Algumas alterações do script podem passar despercebidas, sendo visível apenas a última delas.
- Module Mode: Disponível a partir da versão 2.49 do Blender. É executada uma função disponível em um módulo. A chamada é realizada por "Modulo.Funcao". A função é executada toda vez que o controlador é chamado. Mas outras funções e variáveis fora do escopo da função chamada serão executadas apenas uma vez.
Atuadores
O atuador realiza alguma ação no ambiente após receber algum sinal positivo de seu respectivo controlador. Os atuadores disponíveis na engine são:
- Movimento: configura o objeto em movimento e rotação, existem diferentes opções desde teletransporte até empurrar objetos. Esse tipo de atuador é útil para a movimentação de personagens.
- Forma / Ação: trata animações armazenadas nas teclas de forma e animadas com ações de forma.
- Ação: trata de ações armature (corpo de personagens), isto é visível apenas se um corpo está selecionado.
- Restrição: restrições são usadas para limitar locais de objetos, distância ou rotação. Esses são úteis para controlar a física do objeto no jogo.
- IPO: controla animações IPO, estas podem mover, rotacionar, redimensionar, mudar cores de objetos e mais.
- Camera: tem opções para seguir objetos suavemente, primariamente para objetos camera, mas algum objeto pode usar isso.
- Som: usado para tocar sons no jogo. Ao destrancar uma porta do jogo esse atuador pode tocar algum som característico.
- Propriedade: manipula as propriedades do objeto, como atribuição, adicionar, ou copiar. Atuador mencionado no exemplo do Keyboard Sensor. No jogo Sonic por exemplo, esse atuador poderia ser utilizado para incrementar o número de rings coletados pelo porco-espinho.
- Editar Objeto: edita a malha do objeto, adiciona objetos ou os destrói, isso pode ser usado também para mudar a malha de um objeto.
Cena: gerencia as cenas em seu arquivo .blend, estes podem ser usado como níveis ou para UI e background.
- Aleatório: cria valores aleatórios que podem ser armazenados nas propriedades.
- Mensagem: envia mensagens que podem ser recebidas por outros objetos para ativá-los.
- CD: toca música de cd.
- Jogo: gerencia o jogo inteiro e pode fazer coisas como reiniciar, sair, carregar e salvar o jogo.
- Visibilidade: muda a visibilidade do objeto.
- Filtro 2D: filtro para efeitos especiais como cores sepia ou blur.
- Pai: pode configurar um pai para o objeto, ou remover o pai. Em um jogo onde é necessário salvar algum personagem ou mesmo ter alguma companhia, o personagem principal poderia se tornar pai de outro personagem, que o seguiria para todos os lugares.
- Estado: muda estado do objeto.
Bullet Engine
A
Bullet Engine é um elemento importante para a criação de jogos, pois adiciona elementos físicos ao jogo. Assim, situações como colisões de objetos e quedas de objetos devido a gravidade podem parecer mais realistas.
A Bullet Engine não é própria do Blender, mas sim uma engine separada que tem suas funções dedicadas ao tratamento da física nos jogos e outras aplicações interativas. É muito utilizada para a criação de games, inclusive em outras engines para a criação de jogos. Crystal Space e C4 Engine são duas dessas engines.