Ciclo

De Minecraft Wiki
Ir a la navegación Ir a la búsqueda

Casi todos los videojuegos (incluyendo Minecraft) están impulsados por un gran bucle de programa. Al igual que cada engranaje de un reloj está sincronizado con el péndulo, cada tarea involucrada en avanzar una simulación de juego está sincronizada con el bucle de juego. Por lo tanto, se le llama "ciclo" a cada iteración de este bucle.

Ciclo de juego[editar | editar código]

Un ciclo de juego es donde el bucle de juego de Minecraft se ejecuta una vez. El juego normalmente funciona a una velocidad fija de 20 ciclos por segundo, por lo que un ciclo ocurre cada 0,05 segundos (50 milisegundos, o cinco centésimas de segundo, o una vigésima parte de un segundo), haciendo que un día en el juego dure exactamente 24000 ciclos, o 20 minutos. Sin embargo, si el ordenador no puede seguir esta velocidad, hay menos ciclos de juego por segundo (TPS). Como la gran mayoría de las acciones se cronometran en función del número de ciclos en lugar del tiempo del reloj de pared, esto significa que muchas cosas tardan más en un ordenador más lento.

Una estadística relacionada con los ciclos por segundo (conocido como TPS, por sus siglas en inglés) es los milisegundos por ciclo (conocido como MSPT, por sus siglas en inglés), el tiempo que un servidor usa realmente para calcular un ciclo. El TPS solo se puede mantener en 20 si el MSPT no es mayor de 50. Los siguientes factores suelen contribuir al retraso del lado del servidor:

  • Las tolvas intentan constantemente buscar objetos encima de ellos. Cúbrelos con cualquier objeto con una ranura de inventario o un compostador, ya que esto detiene las comprobaciones de objetos. Alternativamente, usa el transporte basado en el flujo de agua que es más rápido en grandes cantidades.
  • La maquinaria de redstone. Los componentes de redstone, especialmente el polvo de redstone causan cantidades excesivas de actualizaciones de bloques y retraso. Desactivar las construcciones y los relojes de redstone cuando no se usen puede ayudar a mitigar esto.
  • La inteligencia artificial de las criaturas. Usa antorchas para guiar la aparición de criaturas hostiles. Usa granjas más eficientes para los animales.

El valor de MSPT se muestra en la pantalla de desarrollo F3 como “ms ticks” en Java Edition. El gráfico de tiempo de fotograma (Alt + F3) muestra el valor de TPS. Ambas pantallas solo están disponibles como anfitrión multijugador o un jugador, ya que las estadísticas provienen del servidor integrado de tu juego de Minecraft.

Proceso del juego[editar | editar código]

En Java Edition, en cada ciclo de juego se procesan las siguientes acciones en orden:

  • Se ejecutan las funciones con la etiqueta tick o load
  • Cada dimensión se actualiza en orden de Superficie, el Nether y, finalmente, el End. Para cada dimensión:
    • La hora se envía al cliente
    • Se actualiza el borde del mundo
    • Lógica del clima
    • Lógica del descanso del jugador
    • Si esta dimensión es la Superficie:
      • La hora de juego y la hora de día aumentan
      • Se ejecutan las funciones programadas
    • Para cada chunk cargado:
      • La información del chunk se envía al cliente
      • Lógica de ciclo del chunk
    • Los fantasmas, los saqueadores, los gatos y las hordas de zombis intentarán aparecer
    • Los cambios de entidad se envían al cliente
    • Los chunks intentan descargarse
    • Se procesan los ciclos programados
      • Ciclos programados de bloques
      • Ciclos programados de fluidos
    • Lógica de las invasiones
    • Los vendedores ambulantes intentan aparecer
    • Se procesan los eventos de bloques
    • Se procesan las entidades
    • Se procesan las entidades de bloque
  • Las entidades de jugador se procesan
  • El juego intentará guardar automáticamente si han pasado 6000 ciclos
  • Se procesan los paquetes del cliente

Ciclo de chunks[editar | editar código]

La extensión del ciclo aleatorio, mostrado con la propagación de la hierba sobre la tierra. Observe cómo la hierba sigue los límites de los chunks. Las flechas roja y azul en el centro marcan las direcciones +X y +Z. El jugador está en la ubicación (7,7) en un chunk, ligeramente hacia la esquina noroeste del chunk, lo que significa que los centros de dos chunks en el borde en las direcciones -X y -Z se encuentran dentro del radio de 128 bloques, lo que permite el procesamiento del ciclo del chunk. Esto se confirma por las dos protuberancias de hierba de un solo chunk en los bordes norte y oeste. (El norte está arriba)

Como parte de una ciclo de juego, se marcan chunks específicos en cada ciclo de juego.

En Java Edition, los chunks con tipo de carga de ciclo de entidad (ver Chunk#Level and load type) y con distancia horizontal entre su centro y un jugador (que no esté en modo espectador) menor de 128 bloques se marcan en cada ciclo de juego. Hay que tener en cuenta algunas cosas aquí: primero, el chunk debe cargarse como un chunk de ciclo de entidad. Segundo, si el chunk recibe un ciclo de chunk, aunque algunos bloques del chunk estén fuera del radio de 128 bloques, pueden recibir un ciclo aleatorio como normal. Tercero, como 128 bloques es la distancia horizontal, la posición del jugador a lo largo del eje y no importa.

En Bedrock Edition, todos los chunks dentro de la distancia de simulación (o especificados en el comando /tickingarea) se marcan en cada ciclo de juego. El ciclo aleatorio ocurre al azar en los bloques de los chunks que se ciclan, independientemente de la posición del jugador dentro del chunk. La distancia de 128 bloques utilizada en Java no se aplica.

En ambas ediciones, las siguientes cosas sucederán cuando se cicla un chunk:

  • Las criaturas aparecen naturalmente.
  • Durante una tormenta, puede caer un rayo en algún lugar del chunk (1100000 de probabilidad)
  • 116 de probabilidad de que se elija una columna para hacer comprobaciones meteorológicas en el bloque más alto:
  • Un cierto número de bloques dentro del chunk reciben ciclos aleatorios de bloques, como se describe a continuación.

Ciclo aleatorio[editar | editar código]

Los chunks consisten en un subchunk por cada 16 bloques de altura, cada uno siendo un cubo de bloques de 16×16×16=4096. Las secciones se distribuyen verticalmente empezando por el nivel más bajo de y. Cada ciclo de chunk, se eligen al azar algunos bloques de cada sección del chunk. Los bloques en esas posiciones reciben un “ciclo aleatorio”.

En Java Edition, el número de bloques elegidos de cada sección está especificado por /gamerule randomTickSpeed (por defecto 3), y un bloque puede ser elegido varias veces en un mismo ciclo de chunk. En Bedrock Edition, también depende de randomTickSpeed (por defecto 1), pero solo especifica la velocidad relativa en lugar del número exacto.

La mayoría de los bloques ignoran este ciclo, pero algunos la usan para hacer algo:

Como los ciclos aleatorios de bloques se conceden al azar, no hay forma de predecir cuándo un bloque puede recibir su próxima marca. En Java Edition, el tiempo medio entre ciclos es de 47,30 segundos (log409634096(0.5) 946.03 ciclos de juego). Es decir, hay un 50% de probabilidad de que el intervalo sea igual o menor que 47,30 segundos y un 50% de probabilidad de que sea igual o mayor que 47,30. Sin embargo, a veces es mucho más largo o corto: por ejemplo, hay un 1,38% de probabilidad de que el intervalo sea menor que un segundo y un 1,23% de probabilidad de que sea superior a cinco minutos. De media, los bloques se actualizan cada 68,27 segundos (40963 1365.33 ciclos de juego). Para ver las matemáticas detrás de estos números, consulte las entradas de Wikipedia para la distribución geométrica.

Ciclo programado[editar | editar código]

Algunos bloques pueden solicitar una marca en algún momento del futuro. Estos "ciclos programados" se utilizan para cosas que tienen que suceder de forma predecible, por ejemplo, los repetidores de redstone programan un ciclo para cambiar de estado en Java Edition, el agua programa un ciclo cuando necesita moverse.

Como parte de un ciclo de juego, cada posición de bloque que ha solicitado un ciclo de bloque programado se marca en el ciclo de juego específico.

En Java Edition, hay dos tipos de ciclos programados: ciclos de bloque y ciclos de fluido. Los ciclos de bloque se ejecutan primero en función de la prioridad y luego en función del orden de programación. Un valor menor para la prioridad resulta en una ejecución anterior durante la fase de ciclo programado. Si un repetidor de redstone está orientado hacia la parte trasera o lateral de otro diodo, su marca de bloque tendrá una prioridad de -3. Si un repetidor de redstone se está desactivando, tendrá una prioridad de -2. De lo contrario, el repetidor tendrá una prioridad de -1. Si un comparador de redstone está orientado hacia la parte trasera o lateral de otro diodo, tendrá una prioridad de -1. Todos los demás ciclos de bloque tendrán una prioridad de 0. A continuación, cada bloque con un ciclo de fluido programado se marcará. Los ciclos de fluido no utilizan prioridades y solo se ordenan en función del orden de programación.

En Java Edition, el número máximo de ciclos programados por ciclo de juego es 65.536. En Bedrock Edition, el número máximo de ciclos programados en un chunk por ciclo de juego es 100.

Ciclo de redstone[editar | editar código]

Un ciclo de redstone describe dos ciclos de juego. Esto crea un retraso de 110 de segundo en la señal de un circuito de redstone; es decir, el tiempo que tarda la señal en viajar desde una ubicación A hasta una ubicación B se incrementa en 0,1 segundos. Un ciclo se refiere solo al aumento del tiempo de la señal, por lo que el tiempo de viaje de la señal nunca puede disminuir en referencia a los ciclos. Un repetidor de redstone tiene un retraso de 1-4 ciclos de redstone. El retraso por defecto es de 1 ciclo de redstone, y al pulsar usar objeto sobre el repetidor se aumenta, indicado visualmente por el deslizador que se mueve hacia abajo del bloque.

Los ciclos de redstone en realidad no son algo "real", sino un término creado por la comunidad para facilitar el uso de la redstone, ya que la mayoría de los componentes de redstone tienen retrasos de múltiplos de 2 ciclos de juego.

Hay que tener en cuenta que los circuitos puros de redstone no se ven afectados por los chunks que se están marcando. Usando repetidores, es totalmente posible enviar una señal muy fuera de la distancia de simulación/renderización y que vuelva a entrar. Sin embargo, en cuanto se involucran tolvas, pistones u observadores, etc., la secuencia se pausa, ya que todos necesitan actualizaciones reales de bloques. Así, los circuitos que dependen de retrasos combinados de redstone que ocurren junto con otros eventos de bloques se rompen cuando los ciclos regulares de bloques se pausan.


Referencias[editar | editar código]