¿Cómo get el mismo time que la actualización (currentTime :) usa la function? (antes de que se llame)

Pregunta: La function de update(currentTime:) en SKScene se denomina cada cuadro con un argumento currentTime . Me pregunto cómo get el time de la misma update(currentTime:) origen update(currentTime:) usa sin usar la function de update . Solo encontré CFAbsoluteTimeGetCurrent() que es diferente.

Motivo: para calcular timeSinceLastUpdate necesita una variable de instancia llamada timeOfLastUpdate . Para implementar timeOfLastUpdate , debe establecerlo en un valor arbitrario antes de la primera actualización que hace que el primer cálculo de timeSinceLastUpdate incorrecto. Podría tener una instrucción if simple para detectar esto o utilizar opciones, pero esa es una twig innecesaria que podría evitarse si solo estableciera timeOfLastUpdate en didMoveToView(view:) . Y eso es lo que trato de hacer.

La primera timeSinceLastUpdate que timeSinceLastUpdate siempre será diferente del rest. Normalmente, uno almacena el time absoluto de la llamada de update anterior y lo resta del time de la llamada actual para get un timeSinceLastUpdate . Si la hora anterior no existe porque está en el primer paso a través del bucle de renderizado, se establece en cero o infinito o negativo, algo o cualquier valor centinela en el que lo inicializó, simplemente configure su time desde timeSinceLastUpdate de timeSinceLastUpdate hasta un valor nominal para comenzar . Algo así como su intervalo de fotogtwigs (16,67 ms si va por 60 fotogtwigs por segundo) tendría sentido: no quiere que el código del juego dependa de ese intervalo de time para hacer algo salvaje porque lo pasó a cero o un valor enormemente enorme.

De hecho, no es una mala idea tener lógica para normalizar tu timeSinceLastUpdate que timeSinceLastUpdate cuerdo en caso de que se vuelva grande, por ejemplo, porque tu usuario hizo una pausa y reanudó el juego. Si tiene entidades de juego (como los agentes de GameplayKit) cuyo movimiento sigue un tipo de position += velocity * timeSinceLastUpdate model position += velocity * timeSinceLastUpdate , quiere que se muevan por el time de un fotogtwig cuando reanude una pausa, no tome una pausa de cinco minutos veces la velocidad y salta al hiperespacio.

Si inicializa su time anterior a cero, restar y normalizar a su intervalo de fotogtwig esperado, cubrirá los casos de inicio y de desemparejamiento con el mismo código.

Siempre se puede usar coalesce:

 let deltaTime = currentTime - (previousTime ?? currentTime). 

En el primer ciclo, su deltaTime es 0 (debería ser esto) después de eso, es el cambio

Por supuesto, el time anterior debe ser opcional para que esto funcione