Я сделал анимированные сетки в Blender, содержащие две анимации клипов, которые я назвал интро и простоя. Я экспортирую его с экспортером Blender в JSON. Все отлично работает. Я могу переключить ту анимацию, которую хочу играть. Моя проблема в том, что я хочу полностью воспроизвести первую анимацию , а затем переключиться на вторую анимацию, которую я настрою на цикл.проверить, когда clipAction анимация закончила играть в three.js
Вот части кода я использую для JSON и анимационной части:
var jsonLoader = new THREE.JSONLoader();
jsonLoader.load('models/feuille(19fevrier).json',
function (geometry, materials) {
mesh = new THREE.SkinnedMesh(geometry,
new THREE.MeshLambertMaterial({
skinning: true
}));
mixer = new THREE.AnimationMixer(mesh);
action.intro = mixer.clipAction(geometry.animations[ 0 ]);
action.idle = mixer.clipAction(geometry.animations[ 1 ]);
action.intro.setEffectiveWeight(1);
action.idle.setEffectiveWeight(1);
action.intro.enabled = true;
action.idle.enabled = true;
action.intro.setLoop(THREE.LoopOnce, 0);
scene.add(mesh);
scene.traverse(function(children){
objects.push(children);
});
action.intro.play();
});
То, что я искал это функция, которая говорит мне, что действие завершено, нечто подобное OnComplete событие когда clipAction закончил игру. Я нашел ответ на three.js GitHub:
mesh.mixer.addEventListener('finished',function(e){
// some code
});
Это, кажется, работает, но я действительно не понять addEventListener
в этом контексте и ни какие function(e)
средства.
Существует звено the code I found on GitHub
Прежде всего, спасибо за быстрое реагирование. Я лучше понимаю концепцию addEventListener. Я попытался использовать код в своем скрипте, но у меня нет никакого результата. Может быть, это синтаксическая ошибка? Там код, который я пытался использовать: \t \t \t 'mesh.mixer.addEventListener ('закончил', функция (e.action.intro) {' \t \t \t 'action.idle.play(); ' \t \t \t'}); ' – larsenhupin