Programação de Eventos e Python Prof. Julio Arakaki (www.pucsp.br/~jarakaki) Programação de Eventos e Python – Blender Inicialmente, criaremos uma movimentação para o objeto cilindro, utilizando-se as configurações das setas no “game engine” do blender. Abra o arquivo exemplo: ScriptTeste.blend e execute o game (tecla P). Selecione o objeto cilindro, e insira as movimentações utilizando as setas do teclado. Utilize o menu “realtime buttons”: Nomeie os sensores com os nomes “up”, “down”, “left” e “right”. Faça o cilindro se movimentar e verifique os “sintomas” de acordo com as configurações. Programação de Eventos e Python Prof. Julio Arakaki (www.pucsp.br/~jarakaki) Utilizando Script Python: Remova os controladores criados para cada tecla (os sensores deverão ser mantidos). Crie um controlador do tipo Python. Ligue cada sensor ao controlador criado. “split” a janela 3D e abra uma janela de “text editor”. Inclua os comandos a seguir: cont = GameLogic.getCurrentController() own=cont.getOwner() #sensores forward=cont.getSensor("up") backward = cont.getSensor("down") turnleft=cont.getSensor("left") turnright=cont.getSensor("right") #atuadores motion=cont.getActuator("motion") #processamento speed=5 rspeed=0.02 walk=0 turn=0 if forward.isPositive(): walk=speed if backward.isPositive(): walk=-speed if turnleft.isPositive(): turn=rspeed if turnright.isPositive(): turn=-rspeed motion.setLinearVelocity(0,walk,0,1) motion.setDRot(0,0,turn,1) GameLogic.addActiveActuator(motion,1) Renomeie o script para myScript. Inclua este mesmo nome no controlador criado para o cilindro. Programação de Eventos e Python Prof. Julio Arakaki (www.pucsp.br/~jarakaki) Adicione um atuador chamado motion. Ligue no controlador Python. Execute o game com a tecla P. Atividade: Crie o seguinte “sintoma” para o game: selecione alguns cubos de tal forma que, se ocorrer colisão com o cilindro, a força aplicada deverá ser 1000. Dicas: - crie um sensor do tipo “collision” no objeto cilindro e configure com o nome da propriedade dos cubos selecionados. - em cada cubo selecionado, deve-se adicionar uma propriedade que será utilizada para detectar a colisão (p.ex. prop). - crie um atuador do tipo motion. - ligue o sensor e o atuador no controlador Python. - insira o código no script Python para detectar a colisão. Exemplo: ... #sensores ... collision=cont.getSensor(“collision”) #atuadores ... act=cont.getActuator(“act”) #verifica se houve colisao ... if collision.isPositive: x=1000 ... act.setForce(0,x,0,1) GameLogic.addActiveActuator(act,1) ... Programação de Eventos e Python Prof. Julio Arakaki (www.pucsp.br/~jarakaki) SOLUÇÂO cont = GameLogic.getCurrentController() own=cont.getOwner() #sensores forward=cont.getSensor("up") backward = cont.getSensor("down") turnleft=cont.getSensor("left") turnright=cont.getSensor("right") collision=cont.getSensor("collision") #atuadores motion=cont.getActuator("motion") act=cont.getActuator("act") #processamento speed=5 rspeed=0.02 walk=0 turn=0 force=0 if forward.isPositive(): walk=speed if backward.isPositive(): walk=-speed if turnleft.isPositive(): turn=rspeed if turnright.isPositive(): turn=-rspeed if collision.isPositive(): force=1000 motion.setLinearVelocity(0,walk,0,1) motion.setDRot(0,0,turn,1) GameLogic.addActiveActuator(motion,1) act.setForce(0,force,0,1) GameLogic.addActiveActuator(act,1)