Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

229
Visualizações
(Threejs Model Project) Cómo activar la animación sin hacer clic

Actualmente tiene modelo de coche three.js. Las puertas del coche se abren al hacer clic. Mi objetivo es cambiar esta función a donde se abren en función de una declaración verdadera o falsa. 'Si es verdadero, comienza la animación de apertura de la puerta'. Si es falso, comienza la animación de cierre de la puerta'. ¿Cómo hago para cambiar la forma en que funciona esta función?

Esto es lo que tengo ahora mismo. Se dispara cuando se hace clic.

 const MOVABLE_PARTS = { bonnet_ok_primary_0: { isOpen: false, type: 'rotation', axis: 'x', offset: Math.PI / 3, }, boot_dummy: { isOpen: false, type: 'rotation', axis: 'x', offset: -Math.PI / 6, }, door_lf: { isOpen: false, type: 'rotation', axis: 'z', offset: -Math.PI / 3, }, door_lr: { isOpen: false, type: 'rotation', axis: 'z', offset: -Math.PI / 3, }, door_rf: { isOpen: false, type: 'rotation', axis: 'z', offset: Math.PI / 3, }, door_rr: { isOpen: false, type: 'rotation', axis: 'z', offset: Math.PI / 3, }, door_lf_glass0_0: { isOpen: false, type: 'position', axis: 'z', offset: -0.2, }, door_lr_glass0_0: { isOpen: false, type: 'position', axis: 'z', offset: -0.2, }, door_rf_glass0_0: { isOpen: false, type: 'position', axis: 'z', offset: -0.2, }, door_rr_glass0_0: { isOpen: false, type: 'position', axis: 'z', offset: -0.2, }, }; type MovablePartName = keyof typeof MOVABLE_PARTS; const MOVABLE_PART_NAMES = Object.keys(MOVABLE_PARTS); const selectControls = new SelectControls( [this.model], this.camera, this.canvas ); selectControls.addEventListener('select', (event) => { const e = event as SelectEvent; if (e.object) { const obj = e.object; this.model.handleClick(obj); const pos = new Vector3(); obj.getWorldPosition(pos); // eslint-disable-next-line no-console console.info(obj.name, obj.position.toArray(), pos.toArray(), obj); } }); selectControls.activate(); togglePart(name: MovablePartName) { const part = this._movableParts[name]; const target = this._root?.getObjectByName(name); if (part && target) { if (!part.isOpen) { part.isOpen = true; new Tween(target) .to({ [part.type]: { [part.axis]: part.offset } }, 500) .start(); } else { part.isOpen = false; new Tween(target).to({ [part.type]: { [part.axis]: 0 } }, 500).start(); } } } handleClick(obj: Object3D) { let target: Object3D | null = obj; while (target !== null && !MOVABLE_PART_NAMES.includes(target.name)) { if (target.parent) { target = target.parent; } else { target = null; break; } } if (target) { const name = target.name as MovablePartName; this.togglePart(name); } }
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda