#✅ | Como funciona el ticker?
1 messages · Page 1 of 1 (latest)
Voy a revisar cómo se configura el ticker para pasarte algo exacto y sin inventar nada 😄
Sí, claro 😄
En FancyMenu, un Ticker no es una “pausa” dentro de una cadena de acciones. Más bien es un elemento que se ejecuta repetidamente cada cierto tiempo.
Entonces hay 2 casos distintos:
1) Quieres que la cadena se ejecute cada 5000 ms
- Añades un Ticker
- Le pones Tick Delay = 5000
- Dentro del Action Script metes tu cadena de acciones
Eso hará que se repita cada 5 segundos.
2) Quieres que la cadena se ejecute solo una vez después de 5000 ms
Ahí el ticker por sí solo no hace un “wait” directo. Lo normal es usar un contador:
- Pones un Ticker con un delay corto, por ejemplo
50 ms - Ese ticker va sumando una variable, por ejemplo
timer - Cuando
timerllega a100, ya pasaron aprox.5000 ms
porque100 x 50 = 5000
Luego haces un IF:
- si
timer >= 100- ejecutas tu cadena de acciones
- y si quieres, reseteas
timera0
En resumen:
- 5000 ms directo = repetir cada 5 segundos
- una sola vez después de 5000 ms = ticker + variable contador + IF
Si quieres, te puedo escribir un ejemplo exacto paso a paso para:
- que se ejecute una sola vez después de 5 segundos, o
- que se repita cada 5 segundos 👍
me puedes ayudar a hacer eso de la suma de la variable? porfavor necesito añadirla al principio de todo cierto?
Voy a aclarar el setup de la variable para no liarla 🙌
Sí, te ayudo 😄
Y no, no va al principio de todo el menú.
Va dentro del Ticker, en la parte que se ejecuta cada vez que el ticker corre.
La idea es esta:
- Crear una variable, por ejemplo
timer - Ponerla en
0 - En el ticker, primero hacer que suba
+1 - Luego comprobar si ya llegó al número necesario
- Si sí, ejecutar tu cadena de acciones
Si tu ticker corre cada 50 ms, entonces:
5000 ms / 50 ms = 100- o sea, cuando
timerllegue a100, ya pasaron unos 5 segundos
Puedes usar algo así para la suma:
timer:{"placeholder":"calc","values":{"expression":"{\"placeholder\":\"getvariable\",\"values\":{\"name\":\"timer\"}} + 1","decimal":"false"}}
Eso significa:
- toma el valor actual de
timer - súmale
1 - guarda el resultado otra vez en
timer
Cómo lo harías paso a paso:
- Crea la variable
timer - Dale valor inicial
0 - En el Ticker
- pon
Tick Delay = 50 - primero añade la acción para sumar
timer + 1 - después añade un IF
- condición:
timer >= 100 - dentro del IF metes tu cadena de acciones
- y si quieres que solo pase una vez, luego reseteas
timer = 0
- condición:
- pon
O sea, en corto:
- No lo añades “al principio de todo”
- Sí lo añades dentro del ticker, en cada tick
- Primero suma
- Luego comprueba
Si quieres, te puedo escribir ahora mismo un ejemplo completo súper exacto, tipo:
- ticker
- variable
- condición
- y una acción de prueba
para que lo copies tal cual 😌
ya entonces ayudame a crear el ticker desde 0 y agregar eso al "Edit Action Script" porfavor
Estoy armando los pasos desde cero para que lo puedas copiar tal cual 😄
Sí, obvio 😄 Vamos desde 0 y lo dejamos listo para usar.
La idea va a ser esta:
- crear una variable
timer - crear un Ticker
- hacer que el ticker sume
1cada vez - comprobar si llegó a
100 - ejecutar tu cadena de acciones
- resetear
timersi quieres que se repita
Como el ticker va a correr cada 50 ms, entonces:
100 x 50 ms = 5000 ms
1) Crear la variable
Primero crea una variable llamada:
timer
Y ponle valor inicial:
0
Si no la creas antes, el ticker no tendrá dónde guardar el conteo.
2) Crear el Ticker
Ve al editor de layout y crea un elemento nuevo:
- clic derecho en el fondo
New ElementTicker
3) Configurar el Ticker
Haz clic derecho al ticker y ponle algo así:
- Tick Delay:
50 - Tick Mode: Normal / continuo
Con eso el ticker se ejecuta muchas veces por segundo y sirve como contador.
4) Abrir Edit Action Script
Ahora haz clic derecho al ticker y entra en:
Edit Action Script
Ahí vas a meter la lógica.
5) Añadir la suma de la variable
Dentro del script:
- clic derecho
Add Action- busca algo como Set Variable Value
Y ahí pones que timer aumente en 1.
El valor sería algo así:
timer:{"placeholder":"calc","values":{"expression":"{\"placeholder\":\"getvariable\",\"values\":{\"name\":\"timer\"}} + 1","decimal":"false"}}
Eso significa:
- toma el valor actual de
timer - súmale
1 - guárdalo otra vez en
timer
6) Añadir el IF
Después de esa suma, añade un IF:
- clic derecho
Add IF Statement
La condición debe ser algo como:
timer >= 100
Porque con 50 ms por tick, 100 ticks son unos 5000 ms.
7) Meter tu cadena de acciones dentro del IF
Dentro de ese IF, pones las acciones que quieres que ocurran después de 5 segundos.
Por ejemplo:
- abrir una pantalla
- cambiar texto
- mandar una acción
- lo que necesites
8) Resetear el contador
Si quieres que vuelva a contar otra vez después de ejecutar la cadena, al final del IF añade:
timer:0
Así el contador vuelve a empezar.
Cómo debería quedar
Más o menos así:
Ticker
-> Set Variable Value: timer = timer + 1
-> IF timer >= 100
-> tus acciones
-> timer = 0
Muy importante
El orden sí importa:
- primero sumas
- luego compruebas
- luego ejecutas
- luego reseteas si quieres repetir
Si lo pones al revés, no va a funcionar como esperas.
Si quieres, en el siguiente mensaje te lo puedo escribir como un “script de ejemplo” ya rellenado, por ejemplo para que después de 5 segundos:
- abra una pantalla,
- active algo,
- o ejecute una acción concreta que tú quieras 💛
parece que el calculo de suma no funciona.... literalmente el valor de la variable timer se vuelve "timer:{"placeholder":"calc","values":{"expression":"{"placeholder":"getvariable","values":{"name":"timer"}} + 1","decimal":"false"}}"
Voy a comprobar la sintaxis exacta porque eso pinta a que lo está tomando como texto plano 😅
Sí, ya vi el problema 😅
Eso significa que FancyMenu está guardando el placeholder como texto plano, no como cálculo.
Lo más importante aquí es esto:
- No uses la versión con
\\\" - No lo metas en
Manage Variables > Set Value - Hazlo en
Edit Action Script - Y si puedes, inserta los placeholders con el botón de Placeholders, no escribiendo JSON escapado a mano
Prueba exactamente esto en la acción Set Variable Value del ticker:
timer:{"placeholder":"calc","values":{"expression":"{"placeholder":"getvariable","values":{"name":"timer"}} + 1","decimal":"false"}}
Ojo:
- eso va tal cual
- sin barras invertidas
\ - sin comillas extra alrededor de todo
Si al pegarlo te queda algo como esto:
timer:{\"placeholder\":\"calc\"...}
entonces ya está mal desde el principio, porque se volvió texto escapado.
Cómo debe quedar el ticker
Dentro de Edit Action Script:
-
Set Variable Value
timersube +1
-
IF
- condición:
timer >= 100
- condición:
-
Dentro del IF
- tus acciones
-
Al final
timer:0si quieres que repita
Si sigue fallando
Haz esta prueba rápida:
- primero pon solo:
timer:1
Si eso funciona, entonces la acción está bien y el problema es solo el placeholder del cálculo.
Si quieres, te hago ahora mismo una versión paso a paso con clicks exactos de cómo meter ese calc desde el editor, sin escribir el JSON a mano 🙌
YA FUNCIONA CORRECTAMENTE! muchas gracias! AHORA ME GUSTARIA QUE AL FINAL hubiera algun factor para que pare el calculo.... osea me gustaria que suceda esto:
PRIMERO:la logica para que vaya sumando con el ticker
SEGUNDO: mi cadena de acciones
TERCERO: que pare el ticker
es posible esto? ayudame porfavor 🙏🙏🙏
Voy a confirmar la forma correcta de parar el ticker para decírtelo bien 🙏
Sí, totalmente es posible 🙌😄
Y la forma más limpia suele ser esta:
1. el ticker suma
2. llega a 100
3. ejecuta tu cadena de acciones
4. al final desactiva el layout donde está ese ticker
Así el ticker deja de correr porque el layout ya no está activo.
La opción más recomendable
Si puedes, mete ese ticker en un layout separado solo para esa lógica.
Luego, al final de tu IF, añade la acción:
- Disable Layout
- seleccionas el nombre de ese layout
Según la docs, FancyMenu sí tiene la acción disable_layout para desactivar layouts.
Cómo quedaría la lógica
Algo así:
Ticker
-> Set Variable Value: timer = timer + 1
-> IF timer >= 100
-> tu cadena de acciones
-> Disable Layout: [nombre de tu layout]
Importante
Pon el Disable Layout al final del todo, después de tu cadena de acciones.
Así te aseguras de que primero haga todo y luego se apague.
Si quieres algo todavía más seguro
Puedes usar una segunda variable, por ejemplo timer_done, pero en tu caso normalmente no hace falta si desactivas el layout al final.
Resumen rápido
- Sí se puede
- La mejor forma es:
- ticker dentro de un layout propio
- ejecutar acciones
- luego
Disable Layout
Si quieres, te lo escribo ahora mismo en formato de pasos exactos dentro de Edit Action Script, tipo:
Add ActionAdd IF- dónde poner cada cosa
para que lo copies tal cual 😄
pero el layout propio cargará incluso si no está presente? tal vez no.... tambien me gustaria saber como puedo hacer para que la variable se reinicie cada vez q reinicio el juego
Ya tengo la idea clara: te confirmo si el ticker necesita un layout cargado y cómo dejar la variable reseteada al arrancar 👌
Sí, justo así 😄
Si el layout no está cargado, el ticker no corre.
O sea, un layout normal con ticker solo funciona cuando ese layout está activo para la pantalla en la que estás. Si lo pones en un layout que solo aplica a una pantalla concreta, entonces fuera de esa pantalla no va a hacer nada.
Entonces, para tu caso
Lo más práctico es esto:
- dejar el ticker en el mismo layout donde lo necesitas
- cuando llegue al final:
- ejecutar tu cadena de acciones
- marcar una variable como terminado
- si quieres, desactivar ese layout
Así no dependes de que “siga vivo” fuera de la pantalla.
Sobre reiniciar la variable cuando reinicias el juego
La documentación no me muestra un “reset automático” de variables al iniciar Minecraft como una opción directa.
Pero sí puedes hacerlo de forma segura cuando se abre la pantalla donde usas el ticker.
Por ejemplo, al abrir esa pantalla, haces:
timer:0
timer_done:false
Eso te deja todo limpio cada vez que entras.
La forma más limpia para ti
Te recomiendo esta estructura:
Al abrir la pantalla
timer = 0timer_done = false
En el ticker
- si
timer_doneesfalsetimer = timer + 1- si
timer >= 100- ejecutas tu cadena de acciones
timer_done = true
Así:
- no se repite
- no depende de que el juego se reinicie
- cada vez que entres a la pantalla vuelve a empezar desde cero
Si quieres borrar todo de golpe
FancyMenu también tiene la acción:
Clear All Variables
Pero ojo, eso borra todas las variables, no solo timer.
Yo solo la usaría si de verdad te da igual resetear todo.
Resumen corto
- Sí, el ticker necesita que el layout esté cargado
- No, no correrá si el layout no está activo
- Para reiniciar
timer, pontimer:0cuando se abra la pantalla - Para evitar repeticiones, usa
timer_done:false/true
Si quieres, te escribo ahora mismo el script completo exacto, separado en:
On OpenTickerIF finalReset
para que lo copies tal cual 🙏
lo que ocurre es que yo lo uso en la pantalla principal.... ahora como hago?
Estoy ajustando la solución para la pantalla principal, que ahí cambia un poco el enfoque 😄
Sí, ahí cambia un poquito el enfoque 😄
Como lo estás usando en la pantalla principal, lo mejor es no desactivar todo el layout del menú, porque entonces también se te irían las cosas visuales del menú.
Lo que te recomiendo
Haz esto:
- el ticker vive en la pantalla principal
- al abrir esa pantalla, reinicias las variables
- cuando llega al final, pones una variable tipo
timer_done = true - y el ticker deja de hacer lógica
Estructura ideal
Variables
Crea estas 2:
timer = 0
timer_done = false
Al abrir la pantalla principal
En el evento de apertura del Title Screen, pon:
timer:0
timer_done:false
Eso hace que cada vez que vuelvas al menú principal, empiece limpio.
En el ticker
La lógica sería:
- si
timer_doneesfalse - suma
timer - si
timer >= 100- ejecuta tu cadena de acciones
- pon
timer_done = true
Así el ticker no sigue repitiendo la acción.
¿Y si quieres que se reinicie al volver al menú?
Perfecto, porque la pantalla principal se abre otra vez y ahí vuelves a poner:
timer:0
timer_done:false
Importante
Si haces Disable Layout sobre el layout principal del menú:
- se te puede desactivar también el menú customizado
- por eso no te lo recomiendo si el ticker está dentro del mismo layout del Title Screen
Resumen rápido
Para la pantalla principal, lo mejor es:
- al abrir la pantalla: resetear variables
- en el ticker: contar
- al llegar al valor: ejecutar acciones
- después:
timer_done = true
Si quieres, te lo puedo escribir ahora mismo en formato súper simple y exacto, como:
- qué poner en el evento de apertura
- qué poner en el ticker
- y cómo queda el IF final
para que lo copies tal cual 😌
ok te voy a explicar cual era mi miedo.... lo que ocurre es que yo pensaba que el ticker estaba activo si se cargaba el layout y seguia activo para siempre... pero parece que no, solo lo hace en la pantalla de inicio... muy aparte queria preguntarte si el ticker consume algun tipo de recurso
Voy a confirmar lo del consumo del ticker para decirte algo bien seguro 🙂
Sí, tu miedo era bastante lógico 😅 pero en FancyMenu funciona más como te dijo antes el patrón del layout:
- el ticker está activo mientras el layout/pantalla donde vive está cargado
- si sales de esa pantalla, deja de correr
- no se queda “trabajando para siempre” en segundo plano
Así que si lo tienes en la pantalla principal, solo corre mientras estás en el menú principal.
¿Consume recursos?
Sí, pero normalmente muy poco si lo usas bien.
Lo que más afecta es:
- cada cuánto corre el ticker
- cuántas acciones hace
- si usa placeholders complejos
- si lo tienes corriendo sin necesidad
En tu caso
Si tu ticker solo hace algo como:
- sumar una variable
- comprobar si llegó a cierto número
- ejecutar una cadena una sola vez
entonces el consumo suele ser bajo 👍
Para mantenerlo ligero
Te recomiendo esto:
- usar un
Tick Delayrazonable, por ejemplo50 mso más - hacer que el ticker haga solo lo mínimo necesario
- usar una variable tipo
timer_donepara que no siga trabajando después de terminar
Resumen corto
- No, no se queda activo para siempre
- Sí, consume algo de recursos
- pero si solo está en el menú principal y hace una lógica simple, el impacto suele ser mínimo
Si quieres, te puedo ayudar a dejarlo en una versión “ligera” para que consuma lo menos posible 😄
no te preocupes... ahora no se si me podrias ayudar con otro favor... me gustaria que me ayudes a programar un ticker para que este renderice de manera continua (cada 50ms por ejemplo) una variable, si ésta se actualiza se actualizará tambien gracias al ticker en tiempo real... se puede hacer eso?
Voy a revisar si hace falta ticker para eso o si el texto ya se actualiza solo con el placeholder 😄
Sí, se puede, pero hay un detalle importante 😄
El ticker no se usa para “renderizar” el texto en sí.
Normalmente se usa para actualizar la variable, y luego el texto la muestra con un placeholder.
Si solo quieres mostrar una variable en tiempo real
No necesitas ticker para eso.
En un texto o label, pon algo así:
Valor: {"placeholder":"getvariable","values":{"name":"timer"}}
Si timer cambia, el texto debería mostrar el nuevo valor.
Si quieres que la variable cambie cada 50 ms
Ahí sí usas un ticker.
Ejemplo de idea:
- Ticker cada
50 ms - dentro del ticker:
- recalculas o cambias la variable
- el texto usa
getvariable - entonces ves el valor actualizado
En resumen
- Para mostrar una variable: no hace falta ticker
- Para actualizar una variable cada 50 ms: sí hace falta ticker
- Para ver el cambio en pantalla: usa
getvariableen el texto
Ejemplo simple
Si tienes una variable llamada timer, el texto sería:
Timer: {"placeholder":"getvariable","values":{"name":"timer"}}
Y si el ticker hace esto:
timer = timer + 1
entonces el texto irá reflejando ese número.
Si quieres, te puedo armar ahora mismo un ejemplo completo de:
- variable
timer - ticker cada
50 ms - texto mostrando el valor en vivo 😌
podrias darme un ejemplo de ambas funciones porfavor? la variable que quiero renderizar se llama: "remote_version"
Voy a armarte dos ejemplos con remote_version: solo mostrarla y actualizarla con ticker 👌
Sí, obvio 😄 Te dejo los 2 ejemplos con remote_version.
1) Solo mostrar remote_version en un texto
Si lo único que quieres es verlo en pantalla, en un Text element pon esto:
Versión remota: {"placeholder":"getvariable","values":{"name":"remote_version"}}
Eso mostrará el valor actual de la variable remote_version.
Ejemplo:
- si
remote_version = 1.2.3 - verás:
Versión remota: 1.2.3
2) Usar un Ticker para actualizar remote_version
Esto sirve si quieres que la variable se refresque cada cierto tiempo.
Opción ejemplo simple
Crea un Ticker y dentro de Edit Action Script pon:
Tick Delay = 50
Y en el script:
remote_version:{"placeholder":"getvariable","values":{"name":"version_cache"}}
Eso hace que cada 50 ms:
- el ticker lea
version_cache - y copie ese valor dentro de
remote_version
Luego tu texto de arriba mostrará el cambio automáticamente.
Estructura completa
Variable que se muestra
Versión remota: {"placeholder":"getvariable","values":{"name":"remote_version"}}
Ticker
remote_version:{"placeholder":"getvariable","values":{"name":"version_cache"}}
Importante
remote_version por sí sola no “saca” una versión de la nada.
El ticker tiene que tomar el valor desde algún sitio, por ejemplo:
- otra variable como
version_cache - un placeholder dinámico
- una respuesta de request, si la estás guardando en una variable
Si quieres lo más práctico
Si remote_version cambia solo de vez en cuando, no hace falta hacerlo cada 50 ms.
Normalmente con 200 ms, 500 ms o 1000 ms ya va bien y consume menos.
Si quieres, te puedo hacer ahora mismo un ejemplo completo con:
remote_versionversion_cache- el ticker
- y el texto listo para copiar 😄
y una pregunta... tu crees que lea mal primero el archivo porq es un archivo .json? si fuera un archivo .toml o .txt lo leeria mas rapido? o lo leeria correctamente?
Voy a comprobar si FancyMenu lee archivos como texto plano o si depende del formato, para decirte algo bien seguro 🙂
Sí, te entiendo 😄
La respuesta corta es: no suele ser por ser .json.
Lo que más importa es cómo lo estás leyendo y qué placeholder usas.
Lo importante
Si estás usando el placeholder de JSON en FancyMenu, entonces:
- el archivo tiene que ser JSON válido
- y el
json_pathtiene que apuntar bien
Ahí el problema no es la extensión, sino el contenido o la ruta.
Si lo guardas como .txt
Si solo quieres una cosa simple como remote_version, entonces .txt suele ser la opción más simple y ligera 👍
Ejemplo de .txt:
1.2.3
Eso es más fácil de leer que un JSON si solo quieres un valor.
¿Y .toml?
Ahí tengo que ser claro: FancyMenu no documenta soporte directo para TOML como formato especial.
O sea:
- como texto plano, sí podrías leerlo
- pero FancyMenu no lo va a interpretar como TOML automáticamente
¿Va más rápido?
En teoría:
- TXT suele ser lo más simple
- JSON tiene que parsear estructura
- la diferencia real normalmente es mínima si el archivo es pequeño
Así que si me preguntas qué te conviene para remote_version:
- si solo necesitas una versión, usa
.txt - si necesitas más datos estructurados, usa
.json
Mi recomendación para tu caso
Para remote_version, yo usaría:
remote_version.txt
con una sola línea dentro, por ejemplo:
1.20.4
Eso es lo más limpio y fácil de leer.
Si quieres, te puedo decir exactamente cuál de los dos métodos te conviene más según cómo estás obteniendo remote_version ahora mismo 😌
podrias armarme el placeholder del siguiente archivo .txt?
ayudame porfavor
Voy a confirmar la sintaxis exacta para leer un .txt desde URL y te la dejo lista para pegar 😄
Sí claro 😄
Para ese .txt de GitHub, el placeholder sería este:
{"placeholder":"webtext","values":{"link":"https://raw.githubusercontent.com/Kart0/mc1.5_multiplayer_experience/refs/heads/main/version/latest.txt"}}
Si lo quieres ya puesto en un texto del menú, sería así:
Versión remota: {"placeholder":"webtext","values":{"link":"https://raw.githubusercontent.com/Kart0/mc1.5_multiplayer_experience/refs/heads/main/version/latest.txt"}}
Si quieres, también te lo puedo adaptar para que:
- compare esa versión con otra variable
- o te diga si la versión es distinta y muestre “actualización disponible” 👍
mmm y podrias darme un funcion para un ticker? me gustaria que cada "x" valor del timer actualizara el valor de una variable... como tendria que hacerlo? quiero forzar eso porfavor 🙏🙏🙏
Voy a confirmar si el calc soporta módulo para hacerlo justo como quieres 🙏
Sí, claro 🙏😄
Y para hacerlo bien forzado, lo más limpio es usar un contador + reset, no módulo.
La idea
timerva subiendo en el ticker- cuando
timerllega aX - actualizas
remote_version - reseteas
timera0
Eso te obliga a refrescar cada cierto número de ticks.
Ejemplo
Si tu ticker corre cada 50 ms:
20ticks =1 segundo100ticks =5 segundos
Variables
Crea:
timer = 0remote_version= tu variable destino
Ticker
Configura el ticker con:
Tick Delay = 50
Action Script del ticker
La lógica sería así:
1) Sumar timer
timer:{"placeholder":"calc","values":{"expression":"{"placeholder":"getvariable","values":{"name":"timer"}} + 1","decimal":"false"}}
2) IF timer >= X
Por ejemplo, si quieres actualizar cada 20 ticks:
20 x 50 ms = 1000 ms
Dentro del IF pones:
remote_version:{"placeholder":"webtext","values":{"link":"https://raw.githubusercontent.com/Kart0/mc1.5_multiplayer_experience/refs/heads/main/version/latest.txt"}}
y luego:
timer:0
Quedaría así
Ticker
-> timer = timer + 1
-> IF timer >= 20
-> remote_version = webtext(URL)
-> timer = 0
Si quieres cada 5 segundos
Pon:
IF timer >= 100
porque:
100 x 50 ms = 5000 ms
Importante
No te recomiendo depender de % o módulo aquí, porque no te lo puedo confirmar como soportado en FancyMenu.
Con contador + reset te funciona seguro 👍
Si además quieres mostrarlo en pantalla
En un Text element pon esto:
Versión remota: {"placeholder":"getvariable","values":{"name":"remote_version"}}
Así el texto se actualizará cuando el ticker cambie la variable.
Si quieres, te puedo armar ahora mismo el script completo ya listo para copiar, con un valor exacto de X según cada cuántos segundos quieres refrescarlo 😌
✅ | Como funciona el ticker?