Viagra rrp australiaGeneric Levitra. Levitra DosagesGeneric Levitra Orodispersible online
Blender Game Engine » Python Script

Hierarquia no Game Engine

Requisitos: Conhecimento mínimo em programação python para Game Engine.

Uma dúvida que deixa de cabelos brancos a todos os iniciantes no python para o Game Engine, é como acessar objetos via programação. Neste artigo, vou ensinar o conceito básico sobre a hierarquia usada nos jogos do Blender.

Observe a figura abaixo:

Na verdade este diagrama está bem simplificado, pois existem outros itens que podemos incluir na hierarquia, mas vamos tomá-lo como um padrão.

Para que se consiga atingir o destino desejado, será necessário percorrer a hierarquia. Você pode fazer esse percurso tanto do nível mais alto para o mais baixo como também o inverso. Então podemos dividir a programação python em dois tipos: Crescente e Decrescente.

Programação Crescente

Esta é o tipo de programação mais usado. Ele vai subindo o diagrama até chegar no ponto mais alto possível.
A primeira coisa que precisa saber e que todo script python do game engine está ligado a um Controlador. O script python é a parte mais baixa da hierarquia.

Vejamos este LogicBrick:

Neste exemplo existe um controlador do tipo python, dois sensores(CaixaEntrada e Teclado) e dois atuadores(AdicionarJogador e Mensageiro). Todos estão nomeados devidamente. Lembrando que é muito importante nomear os seus logicbricks para que fique mais fácil de localizar via programação.

Vamos imaginar que queremos buscar o Atuador AdicionarJogador para trabalhar com ele. Pelo nosso diagrama, o caminho seria este: Script Python -> Controlador -- > Atuador.

Vamos implantar isso em Python Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-----------------------------------------------------------------
#importando o módulo GameLogic. Este é o módulo mais importante
#do game engine. Em nosso diagrama principal ele não  está
#ligado a nada, mas todos os componentes de jogo de alguma forma
#estão ligados a ele.
import GameLogic

#Como todo script começa na fonte mais baixa (Script Python)
#e como também já  estamos nesta fonte. Teremos que buscar
#o próximo degrau da hierarquia: o Controlador

#A função getCurrentController() busca o controlador que
#executou o script
controlador = GameLogic.getCurrentController()

#Agora que já temos nosso controlador, temos que buscar
#nosso atuador através da função getActuator(“nome_do_atuador”)
atuador = controlador.getActuator("AdicionarJogador")
#----------------------------------------------------------------

Prontinho, já temos nosso atuador armazenado em uma variável de igual nome (atuador). Agora você já pode trabalhar ela usando suas funções e procedimentos (temas para um próximo artigo).

Mas agora, se desse mesmo logicbricks, quisermos buscar o sensor teclado? Como ficaria nosso código? Pelo nosso diagrama, o caminho seria este: Python -> Controlador -- > Sensor.

Então o código ficaria assim:

1
2
3
4
5
6
7
#------------------------------------------------
import GameLogic
controlador = GameLogic.getCurrentController()
#Agora que já temos nosso controlador, temos que buscar
#nosso sensor através da função getSensor(“nome_do_sensor”)
sensor = controlador.getSensor("Teclado")
#------------------------------------------------------------

Já vimos com acessar os sensores e atuadores, agora vamos acessar o objeto que executou o script: Script Python -> Controlador -- > Objeto.

1
2
3
4
5
6
7
#------------------------------------------------------------------
import GameLogic
controlador = GameLogic.getCurrentController()
#vamos buscar o objeto ao qual pertence o controlador que executou
#o script pela função getOwner()
proprietario = controlador.getOwner()
#------------------------------------------------------------------

Prontinho, temos o objeto armazenado na variável proprietário. No game engine, costumamos chamar o objeto que executou o script de proprietário, porque ele é dono de todos os controladores, sensores e atuadores que estão ligados a ele.

Como podemos ver, conseguimos alcançar todas as instancias “possíveis” usando o método de programação Crescente.


Programação Decrescente

A programação decrescente, embora menos comum, é usada em projetos em que objetos têm que interagir entre eles. Ela permite que script que esteja sendo executado em um objeto A possa acessar um objeto B.
Como exemplo, vamos imaginar que se tenha três objetos em cena, nos quais você devidamente os re-nomeou como: bola, quadrado e triangulo. Existe um script no objeto bola que você deseja que acesse o objeto quadrado. Para isso teremos que começar de cima para baixo, de acordo com o nosso diagrama: Cena -- > Objeto.
O script Python para acessar o objeto quadrado ficaria assim:

1
2
3
4
5
6
7
8
9
#------------------------------------------------------------------
import GameLogic

#Buscando a cena que esta sendo executada no jogo
cena = GameLogic.getCurrentScene()

#Buscando o objeto “quadrado” através da função getObjectList()
objeto = cena.getObjectList()["OBquadrado"]
#----------------------------------------------------------------

Observações:
A função getObjectList() retorna uma lista de todos os objetos que estão em cena. Quando você a usa definindo o nome ( getObjectList()["OBquadrado"]), ela busca somente o objeto em questão.
No Game Engine, mesmo que você re-nomeie seu objeto, o blender sempre vai acrescentar o prefixo “OB” no inicio.

Considerações finais:

Como se pode perceber, em ambos os métodos, nenhum alcança os extremos. Os dois só chega até o nível objeto, mas é bom saber que a união deles pode se tornar uma arma poderosa no game engine.


Maio 2007