Panda3D/Manual/Actors multi-partes: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Sem resumo de edição
Linha 1:
É possível criar um modelo de personagem com varias 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 robo que consiste de um par de pernas e um torso, se voce quiser "colar" elas na região do quadril, o modelo das pernas devem ter um osso chamado "quadril", e o modelo do torso deve ter tambem um osso chamado "quadril". você pode então anexar essas partes uma á outra:
 
<pre>
nodePath = Actor.Actor({
'pernas':'Pernasrobo.egg',
'torsopernas':'Torsorobo1Pernasrobo.egg',
},{ 'legstorso':{'dance':'Pernasrobo-DançaTorsorobo1.egg'},
},{'torsolegs':{'dance':'Torsorobo1Pernasrobo-Dança.egg'}}),
'torso':{'dance':'Torsorobo1-Dança.egg'}})
nodePath.attach('torso','pernas','quadril')
</pre>
 
Atores que multi-partes são meio complicados. Cada parte é carregada de um arquivo egg separado, e cada parte têm seu proprio conjunto de animações aplicadas á ela. Para cada animação que você quiser rodar, você precisará ter o arquivo egg correspondente para cada parte.
Linha 14 ⟶ 16:
Aqui está outro exemplo:
 
<pre>
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"}
})
</pre>
 
Em adição as partes do actor multiparte precisam ser conectadas de uma forma compreensivel:
 
<pre>
meuactor.attach("cabeça", "torso", "junta-cabeça")
meuactor.attach("torsocabeça", "pernastorso", "junta-quadrilcabeça")
meuactor.attach("cabeçatorso", "torsopernas", "junta-cabeçaquadril")
</pre>
 
O chamado attach() noemia duas partes, e reparenta a parte nomeada pelo primeiro parametro na parte nomeada pelo segundo parametro, no node chamado pelo terceiro parametro, que deve ser uma junta exposta ( ou seja, uma junta na parte nomeada pelo segundo parametro). Você precisa já ter exposto a junta antes de efetuar essa chamada, tanto com a ferramenta de linha de comandoegg-optchar, ou chamando actor.exposeJoint() durante o runtime.
Linha 39 ⟶ 45:
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===
 
Você pode animar as partes como animações normais, mas você precisa suprir o nome da parte, assim:
 
<pre>
meuactor.play('Nome da Animação', 'Nome da Parte')
</pre>
 
Se você quer usar AnimControl, como explicado nessa sessão, vocêp recisa suprir o nome da parte como um parametro secundario no getAnimControl():
 
<pre>
você pode ver que so é precisa chamar
actor.getAnimControl('Nome da animação','Nome da parte')
para ter acesso ao AnimControlactor.getAnimControl(Controle'Nome deda animação)','Nome daquelada 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 numero em ponto flutuante do frame atual Nota: esse numero continua contando e pode exceder o numero total de frames
ac.getFullFrame() retorna o numero do frame em numero inteiro Nota: esse numero continua contando e pode exceder o numero total de frame
ac.getNextFrame() retorna o numero do proximo frame no queue
ac.getNumFrames() retorna o numero 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
</pre>