Introduo API da BGE
Tutorial de Introduo API da Blender Game Engine
Ol! Esse um pequeno tutorial de introduo API python da Blender Game Engine 2.5x que eu decidi escrever para os iniciantes aps ver muitas dvidas a respeito disso. Vamos comear com: import bge print("Hello World") Isso importa o mdulo bge, onde fica toda a API da BGE. Para executar esse script, mude seu modo do blender para Blender Game, e sua screen (tela) para Game Logic. No menu direito (editor de texto), escreva esse script e nomeie-o de [Link]. No menu inferior crie um sensor Always e conecte-o a um controlador python com o nome [Link]. Se fez tudo certo, quando posicionar o ponteiro do mouse sobre a 3d view e teclar P, o script ser rodado. Verifique no console do blender (para os linuxers, necessrio abrir o blender num terminal ou configurar seu lanador para faz-lo) se h algum erro entre Blender Game Engine Started e Blender Game Engine Finished. Se na verdade houver um Hello World, ento parabns, seu primeiro script funciona ;-)
[Link]
O [Link] um sub-mdulo do bge, equivalente ao antigo GameLogic. Lembre-se que isto apenas uma introduo, se quiser uma documentao completa, visite [Link] e clique em [Link]. Como o prprio nome diz, ele nos permite realizar operaes lgicas no jogo, considero como fundamental num script para BGE. Vejamos o prximo exemplo. #-*- coding: utf-8 -*import bge from bge import logic #O controlador em que o nosso script est inserido cont = [Link]() #Cada controlador tem uma lista de sensores #e atuadores conectados a ele mesmo. Podemos #us-las para controlar o que acontece no jogo sen = [Link]['meusensor'] act = [Link]['meuatuador'] #Cada sensor tem um atributo booleano positive que # verdadeiro sempre que ele detecta alguma coisa if [Link]: [Link] = [0.1,0,0] #vetor X,Y,Z do motion actuator [Link](act) #ativa o nosso atuador Agora, testemos esse script. Modifique seu sensor para um do tipo Keyboard e configure para disparar com a barra de espao, ento nomeie-o de meusensor. Adicione um atuador Motion, nomeie-o de meuatuador e conecte-o ao sensor python. Solano Felcio 1
Introduo API da BGE Agora, quando voc iniciar o jogo e teclar espao, o sensor keyboard ser disparado, ou seja, seu atributo positive ser True, e as duas ltimas linhas no nosso script sero executadas, ativando o atuador ;-) Se quiser uma documentao de todos os sensores, controladores, atuadores etc. da BGE, v em [Link] e clique em [Link]. O mdulo [Link], obviamente, permite-nos fazer muito mais que isso. Esse foi apenas um pequeno exemplo de uso ;-)
[Link]
Esse mdulo equivalente ao antigo Rasterizer. No h muito o que explicar; ele responsvel pela renderizao em tempo real. Vejamos um pequeno exemplo de uso: #-*- coding: utf-8 -*import bge from bge import render from bge import logic co = [Link]() sen = [Link]['meusensor'] if [Link]: [Link]("//screen_#.png") Adicionando um sensor keyboard com True level triggering e nomeando-o de meusensor far com que sempre que voc tecle determinada tecla, seja criada uma imagem da tela atual do jogo na pasta atual (do .blend) no formato screen_numerodoframe.png. Para uma documentao completa do [Link], como j disse, visite a documentao online no site [Link].
[Link]
Esse mdulo equivalente ao antigo GameKeys. Sua funo, como o nome j diz, capturar eventos (de teclado ou mouse). Na verdade, ele s contem constantes com os eventos, o que se usa para captur-los so sensores. Vejamos um exemplo: #-*- coding: utf-8 -*import bge from bge import logic, events co = [Link]() sen = [Link]['meusensor']
for key,status in [Link]:
for key, status in [Link]: #tecla pressionada if status == [Link].KX_INPUT_JUST_ACTIVATED: if key == [Link]: #tecla W Solano Felcio 2
Introduo API da BGE # if key # if key # if key # Fazer alguma coisa se for pressionada == [Link]: #tecla S Fazer alguma coisa se for pressionada == [Link]: #tecla A Fazer alguma coisa se for pressionada == [Link]: #tecla D Fazer alguma coisa se for pressionada
Se voc tiver conectado ao seu controlador python um sensor keyboard chamado meusensor com All Keys pressionado, esse script pode tratar de forma diferente cada tecla, assim no necessria a criao de um sensor para cada, aumentando o desempenho e a organizao do jogo ;-) Assim como os outros mdulos, o [Link] tem uma documentao online, visite-a.
[Link]
Equivalente ao antigo VideoTexture, esse mdulo permite-nos usar texturas em vdeo, atravs do uso do poderoso FFMpeg. O princpio simples: voc acha uma textura num objeto existente com a funo materialID e ento cria uma nova textura de contedo dinmico que substituir a anterior, alocando-a na GPU. Veja um exemplo de uso para rodar um vdeo num objeto: #-*- coding: utf-8 -*import bge from bge import logic, texture cont = [Link]() #vamos usar o objeto que possui o controlador atual obj = [Link] #O script rodado a cada frame, mas s podemos #criar a textura uma vez, ento criaremos um #atributo video no [Link] if not hasattr(logic, 'video'): #identifica a textura esttica que ser substituda matID = [Link](obj, 'nomedatextura') #cria a textura dinmica que substituir a anterior [Link] = [Link](obj, matID) #define a fonte da textura, aqui um vdeo vid = [Link]('//[Link]') [Link] = [Link](vid) [Link] = True #roda o vdeo [Link]() [Link]() #atualiza a textura a cada frame Solano Felcio 3
Introduo API da BGE Para rodar o exemplo acima, necessrio que o controlador python esteja conectado a um sensor Always e o objeto que o contm tenha uma textura chamada nomedatextura. Tambm necessrio, na pasta do .blend atual, um arquivo de vdeo chamado [Link]. Se tudo correr bem, voc ver o vdeo sendo rodado no objeto atual quando rodar o jogo :-) O [Link] tambm tem documentao online, criada na maior parte por mim :-D
[Link]
Chegamos ao nosso ltimo mdulo. Ele equivalente ao antigo PhysicsConstraints, e permite-nos manipular constraints via python em tempo real. No tenho muito o que explicar aqui; Veja o exemplo. #-*- coding: utf-8 -*import bge from bge import logic from bge import constraints #lista de objetos na cena objetos = [Link]().objects obj1 obj2 pid1 pid2 = = = = objetos['objeto1'] objetos['objeto2'] [Link]() #id fsico [Link]() #id fsico
#posies e ngulos dos pontos posx = 1.0 posy = 0.0 posz = -1.0 angx = 0.0 angy = 1.0 angz = 0.0 #cria o constraint [Link](pid1, pid2, constraints.LINEHINGE_CONSTRAINT, posx, posy, posz angx, angy, angz) Esse mdulo tambm tem documentao online (e orgulhosamente escrita inteiramente por mim :-D), visite-a para mais detalhes. Obrigado por ler este tutorial, e bons estudos!
Solano Felcio