Panda3D/Manual/Actors multi-partes
É possível criar um modelo de personagem com várias partes separadas (modelos separados). Se esse é o caso, então as peças devem conter osso que podem ser anexados uns aos outros. Por exemplo, se você tem um robô que consiste de um par de pernas e um torso, se você quiser "colar" elas na região do quadril, o modelo das pernas deve ter um osso chamado "quadril", e o modelo do torso deve ter também um osso chamado "quadril". você pode então anexar essas partes uma à outra:
nodePath = Actor.Actor({
'pernas':'Pernasrobo.egg',
'torso':'Torsorobo1.egg',
},{'legs':{'dance':'Pernasrobo-Dança.egg'},
'torso':{'dance':'Torsorobo1-Dança.egg'}})
nodePath.attach('torso','pernas','quadril')
Atores que multi-partes são meio complicados. Cada parte é carregada de um arquivo egg separado, e cada parte têm seu próprio conjunto de animações aplicadas a ela. Para cada animação que você quiser rodar, você precisará ter o arquivo egg correspondente para cada parte.
No construtor do Actor, você pode especificar a lista de arquivos do modelo com um dicionário do nome para o arquivo egg, como mostrado acima. A lista de arquivos de animação é mais complicado; é um dicionário de dicionários. O dicionário exterior mapeia o nome das partes para o dicionário de animação. Cada animação mapeia o nome da animação para o arquivo egg de animação para a a parte correspondente.
Aqui está outro exemplo:
meuactor = Actor(
# dicionário das partes
{"cabeça":"char/robo/robo_cabeça",
"torso":"char/robo/robo_torso",
"pernas":"char/robo/robo_pernas"},
# dicionario do dicionário de animações
{"cabeça":{"andar":"char/robo/robo_cabeça-andar",
"correr":"char/robo/robo_cabeça-andar-correr"},
"torso":{"andar":"char/robo/robo_torso-andar",
"correr":"char/robo/robo_cabeça-andar-correr"},
"pernas":{"andar":"char/robo/robo_pernas-andar",
"correr":"char/robo/robo_cabeça-andar-correr"}
})
Em adição as partes do actor multiparte precisam ser conectadas de uma forma compreensivel:
meuactor.attach("cabeça", "torso", "junta-cabeça")
meuactor.attach("torso", "pernas", "junta-quadril")
O chamado attach() noemia duas partes, e reparenta a parte nomeada pelo primeiro parâmetro na parte nomeada pelo segundo parâmetro, no node chamado pelo terceiro parâmetro, que deve ser uma junta exposta ( ou seja, uma junta na parte nomeada pelo segundo parâmetro). Você precisa já ter exposto a junta antes de efetuar essa chamada, tanto com a ferramenta de linha de comando egg-optchar, ou chamando actor.exposeJoint() durante o runtime.
Após chamar attach(), a parte "stacked" irá herdar a animação da junta anexada, através da relação do gráfico de cena.
Animação
[editar | editar código]Você pode animar as partes como animações normais, mas você precisa suprir o nome da parte, assim:
meuactor.play('Nome da Animação', 'Nome da Parte')
Se você quer usar AnimControl, como explicado nessa sessão, você precisa suprir o nome da parte como um parâmetro secundário no getAnimControl():
você pode ver que só é preciso chamar
actor.getAnimControl('Nome da animação','Nome da parte')
para ter acesso ao AnimControl(Controle de animação) daquela parte
ac=actor.getAnimControl('Nome da animação','Nome da Parte')
ac.isPlaying() retorna um booleano indicando se a animação está rodando ou não
ac.getFrame() retorna o quadro atual da animação
ac.getFrameRate() retorna a velocidade da animação em frames por segundo
ac.getFullFframe() retorna o número em ponto flutuante do frame atual Nota: esse número continua contando e pode exceder o número total de frames
ac.getFullFrame() retorna o número do frame em numero inteiro Nota: esse número continua contando e pode exceder o número total de frame
ac.getNextFrame() retorna o número do proximo frame no queue
ac.getNumFrames() retorna o número total de frames
ac.getPlayRate() #returns the playrate. explained further below retorna o a velocidade que os frames passarão
ac.loop() roda a animação e loop
ac.play() roda a animação
ac.pose(frame) frame regula as poses
ac.setPlayRate(rate) configura a velocidade da animação. explicado mais tarde
ac.stop() para a animação