es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Javascript/SparkAR – ¿Cómo transformar la escala suavemente utilizando Javascript en SparkAR?

Estoy tratando de transformar la escala de un plano suavemente sin éxito. Estoy tratando de evitar el salto de un número entero al otro. El objetivo es hacer que este lugar se escala al nuevo valor de manera suave.

Agradezco cualquier ayuda que puedas proporcionar.

Pseudo-código

  • Establecer un valor aleatorio
  • Transformar la escala actual a la nueva escala de forma suave
  • Hacerlo cinco veces
  • Restablecer al valor original
  • Repetir el proceso

Código

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para transformar suavemente la escala de un avión y evitar un salto repentino de un entero aleatorio a otro, puede seguir el pseudocódigo y el código a continuación:

    Pseudocódigo:
    1. Asigne un valor aleatorio
    2. Transforme la escala actual a la nueva escala de manera suave usando reactive
    3. Hágalo cinco veces
    4. Volver al valor original
    5. Repita el proceso

    Código:

    const [plane] = await Promise.all([Scene.root.findFirst('plane0')]);
    
    const tiempoEnMilisegundos = 1000;
    const transformacionAvion = plane.transform;
    const anchoAvion = transformacionAvion.scaleX.pinLastValue();
    var numTransformaciones = 0;
    
    function escalaAleatoria() {
      const numAleatorio = Reactive.random();
      const nuevaEscala = Reactive.mul(numAleatorio, 2);
    
      transformacionAvion.scaleX = Reactive.animate(anchoAvion, nuevaEscala, {
        durationMilliseconds: tiempoEnMilisegundos
      });
    
      numTransformaciones++;
    
      if (numTransformaciones >= 5) {
        numTransformaciones = 0;
        transformacionAvion.scaleX = Reactive.animate(nuevaEscala, anchoAvion, {
          durationMilliseconds: tiempoEnMilisegundos
        });
      }
    }
    
    const intervaloTemporizador = Time.setInterval(
      () => escalaAleatoria(),
      tiempoEnMilisegundos
    );
    

    Explicación:
    1. Declaramos las constantes y variables que necesitamos, incluyendo el objeto avión, el tiempo en milisegundos para la animación y el número de transformaciones que han ocurrido.
    2. Creamos una función escalaAleatoria que genera un número aleatorio, usa reactive para animar la escala del avión al nuevo valor aleatorio durante una duración determinada e incrementa el contador numTransformaciones.
    3. Configuramos un temporizador de intervalo para llamar a la función escalaAleatoria cada cierto tiempo especificado.
    4. Si numTransformaciones se vuelve mayor o igual a 5, restablecemos el contador y animamos la escala de vuelta al valor original de la misma manera suave. Esto garantiza que la transformación de la escala avanza y retrocede suavemente sin saltos repentinos.

Comments are closed.