Sei sulla pagina 1di 4

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 meuscript.py. No menu inferior crie um sensor Always e conecte-o a um controlador python com o nome meuscript.py. 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 ;-)

bge.logic
O bge.logic um sub-mdulo do bge, equivalente ao antigo GameLogic. Lembre-se que isto apenas uma introduo, se quiser uma documentao completa, visite http://www.blender.org/documentation/250PythonDoc/ e clique em bge.logic. 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 = logic.getCurrentController() #Cada controlador tem uma lista de sensores #e atuadores conectados a ele mesmo. Podemos #us-las para controlar o que acontece no jogo sen = cont.sensors['meusensor'] act = cont.actuators['meuatuador'] #Cada sensor tem um atributo booleano positive que # verdadeiro sempre que ele detecta alguma coisa if sen.positive: act.dLoc = [0.1,0,0] #vetor X,Y,Z do motion actuator cont.activate(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 http://www.blender.org/documentation/250PythonDoc e clique em bge.types. O mdulo bge.logic, obviamente, permite-nos fazer muito mais que isso. Esse foi apenas um pequeno exemplo de uso ;-)

bge.render
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 = logic.getCurrentController() sen = co.sensors['meusensor'] if sen.positive: render.makeScreenshot("//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 bge.render, como j disse, visite a documentao online no site blender.org.

bge.events
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 = logic.getCurrentActuator() sen = co.sensors['meusensor']
for key,status in sensor.events:

for key, status in sen.events: #tecla pressionada if status == bge.logic.KX_INPUT_JUST_ACTIVATED: if key == events.WKEY: #tecla W Solano Felcio 2

Introduo API da BGE # if key # if key # if key # Fazer alguma coisa se for pressionada == bge.events.SKEY: #tecla S Fazer alguma coisa se for pressionada == bge.events.AKEY: #tecla A Fazer alguma coisa se for pressionada == bge.events.DKEY: #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 bge.events tem uma documentao online, visite-a.

bge.texture
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 = logic.getCurrentController() #vamos usar o objeto que possui o controlador atual obj = cont.owner #O script rodado a cada frame, mas s podemos #criar a textura uma vez, ento criaremos um #atributo video no bge.logic if not hasattr(logic, 'video'): #identifica a textura esttica que ser substituda matID = texture.materialID(obj, 'nomedatextura') #cria a textura dinmica que substituir a anterior logic.video = texture.Texture(obj, matID) #define a fonte da textura, aqui um vdeo vid = logic.expandPath('//nomedovideo.ogg') logic.video.source = texture.VideoFFMpeg(vid) logic.video.source.scale = True #roda o vdeo logic.video.source.play() logic.video.refresh() #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 nomedovideo.ogg. Se tudo correr bem, voc ver o vdeo sendo rodado no objeto atual quando rodar o jogo :-) O bge.texture tambm tem documentao online, criada na maior parte por mim :-D

bge.constraints
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 = logic.getCurrentScene().objects obj1 obj2 pid1 pid2 = = = = objetos['objeto1'] objetos['objeto2'] obj1.getPhysicsId() #id fsico obj2.getPhysicsId() #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 constraints.createConstraint(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

Potrebbero piacerti anche