¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.



 
PortadaÍndiceÚltimas imágenesBuscarRegistrarseConectarse

 

 Simple Stopwatch (Cronómetro)

Ir abajo 
4 participantes
AutorMensaje
elPatrixF
Soporte
Soporte
elPatrixF


Argentina Masculino 100% Cumplimiento de las normas
Reputación : 327
Mensajes enviados : 1296
Edad : 32
Premios : Ganador concurso periódico: Demos de Aplicaciones 3º puesto concurso anual: Demos de juegos

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 1:23 am

[Tienes que estar registrado y conectado para ver esa imagen]
No es la gran cosa; es un programa que hice en menos de una hora por la necesidad de tener un cronómetro bien simplón y de propósito genérico para la PC; y lo comparto acá con la esperanza de que le pueda servir a alguien como ayuda o ejemplo para algo Smile
Y como perdón por mis frecuentes desapariciones (?

Pero bien, este "Simple Stopwatch" es un cronómetro digital sencillito que primero realiza una cuenta atrás (por defecto de 3 segundos) y luego inicia un cronómetro que se puede "detener" al hacerle clic... bah en realidad no se detiene, solo se copia el tiempo actual en un string, como si fuera un "checkpoint" o punto de control.
El temporizador de la cuenta atrás es programable, e inicia haciéndole un clic. Luego si se hace clic en la ventana mientras el cronómetro corre, se guarda el tiempo actual del cronómetro en el segundo renglón, acompañado de un simple efecto de color de letras. Si se quiere, se puede copiar este tiempo también en el tercer renglón, pulsando la barra espaciadora, a manera de guardar 2 tiempos diferentes (Uno como el actual, y el otro como el "top" o mejor tiempo, si se necesita). El tiempo también corre mientras está minimizado, o al mover la ventana.

La ayuda interna está en inglés, solo por hacerme el copado :xD:
Controles escribió:
F1: Ayuda
F2: Resetear todo.
S: Encender/Apagar sonidos.
Clic izquierdo : Iniciar temporizador/Marcar checkpoint (Guardar el tiempo actual del primer renglón en el segundo renglón).
Clic derecho : Iniciar cronómetro instantáneamente (Sin temporizador).
Shift+Clic derecho / Clic medio : Colocar temporizador.
+/- : Aumentar/Disminuir tiempo del temporizador.
Barra espaciadora: Copia el tiempo del checkpoint actual (Segundo renglón) como "mejor tiempo". (En el tercer renglón)

En fin, cosas interesantes que puede llegar a tener este aportejemplo, los más interesantes marcados en azul:
  • Modificación condicional-secuencial del "String alterable" para poder agregar el 0 faltante a las horas/minutos/segundos/fracciones cuando el valor es menor a 0. (Para mostrar 00:01'36"07 en lugar de 0:1'36"7). Esto se encuentra dentro de ambos grupos de eventos
  • Activación/Desactivación de grupos de eventos.

  • Manipulación del timer interno de MMF2 para simplificar los cálculos de fracciones/segundos/minutos/horas del cronómetro.
    Era esto, o usar funciones módulo, división, y redondeo a mansalva para cada modificación al string alterable del cronómetro.
  • Regla de tres simple para calcular porcentajes.
    Usado en el temporizador (rojo), para pasar de "sesentaavos de segundo" a "centésimas de segundo" (Esto ocurre porque el counter se maneja con el framerate); funciona aún alterando el framerate de la aplicación, gracias al uso de la variable global "fps" que altera las funciones relacionadas con el FrameRate de forma acorde.

  • Uso de funciones de color GetRGB(x,y,z), GetRed(x), GetBlue(x) y GetGreen(x), y una variable global "color" para realizar dinámicamente los cambios de color del texto del segundo renglón.
    Esto puede servir para hacer un "efecto destello" en los strings, o relámpagos en un active cambiando la paleta de colores, etcétera.
  • Interpolación? para suavizar este cambio de colores
    "Suavizado X+(Y-X)/S" para suavizar este cambio de colores; donde X es el valor inicial, Y el valor final, y S la cantidad de suavizado. Cuanto mayor sea S, más suave será la transición de X a Y. El caso de S=2 es exactamente lo mismo que (X+Y)/2, una fórmula bastante más sencilla y más fácil de recordar. Estas funciones suelen ser usadas para hacer, por ejemplo, una cámara suavizada.

    Todo esto hecho en la misma función:
    Código:
    GetRGB(GetRed(color)-(0+GetRed(color))/8, GetGreen(color)+(128-GetGreen(color))/8, GetBlue(color)+(32-GetBlue(color))/8)


  • Uso del FrameRate para alterar algunas variables, usando una variable global "FPS" y cambiando el FrameRate a "FPS" en el inicio del programa.
  • Efecto de sacudida usando una variable global "tambalele", el timer, y la función seno.
  • Ventana siempre al frente, usando la extensión Window Control.


[Tienes que estar registrado y conectado para ver esa imagen]

Está hecho con TGF2, así que no usa ninguna extensión de terceros, más allá de Window Control Window control para hacer que la ventana esté siempre al frente.
Está comentado muy por arriba, para entender más o menos que hace cada acción.

Descarga:
EXE : [Tienes que estar registrado y conectado para ver este vínculo]
MFA : [Tienes que estar registrado y conectado para ver este vínculo]



?En realidad no tengo idea si se llama así, pero es la típica formula de suavizado X+(Y-X)/S


Última edición por elPatrixF el Mar Mayo 21, 2013 6:47 pm, editado 2 veces
Volver arriba Ir abajo
http://elpatrixf.com
elpupas7
Administrador
Administrador
elpupas7


España Masculino Ningúno
Reputación : 1243
Mensajes enviados : 3982
Premios : Empty (invisible) Empty (invisible) Empty (invisible) Empty (invisible)

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 3:27 pm

Está muy bien.

La fórmula es para calcular las coordenadas del punto que divide a un segmento en una razón dada. El caso particular es para su punto medio.

Segmento de extremos (x1,x2), (y1,y2):

El punto que queremos calcular:

y=y1+k(y2-y1)
x=x1+k(x2-x1)

donde k está comprendido entre 0 y 1.
para el caso particular k=0,5 obtenemos el punto medio del segmento.

+R por el .mfa
Volver arriba Ir abajo
elPatrixF
Soporte
Soporte
elPatrixF


Argentina Masculino 100% Cumplimiento de las normas
Reputación : 327
Mensajes enviados : 1296
Edad : 32
Premios : Ganador concurso periódico: Demos de Aplicaciones 3º puesto concurso anual: Demos de juegos

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 4:54 pm

Sí, tal cual ¿pero hay alguna forma de llamar al uso particular de esa función para dar el efecto de "interpolación desacelerada on-the-go"?
Volver arriba Ir abajo
http://elpatrixf.com
elpupas7
Administrador
Administrador
elpupas7


España Masculino Ningúno
Reputación : 1243
Mensajes enviados : 3982
Premios : Empty (invisible) Empty (invisible) Empty (invisible) Empty (invisible)

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 5:43 pm

Hombre, llámala como mejor te parezca.
Las funciones, no suelen tener nombre. Son tan sólo funciones.
Hay excepciones, pero son muy especiales.

La que propones no está mal...
lo malo, es que no es realmente una interpolación, ni hay desaceleración (la k es una constante). Habría desaceleración si hay variación en la constante a lo largo del tiempo o de una sucesión. Pero esto ya sería integrar esta función en otra.

Podríamos decir quizás que se trata de una "razón proporcional" aplicada a un valor dado.
Llevado al movimiento, sería una "razón proporcional" del desplazamiento.
En fin... estoy seguro que se te ocurrirán otros nombres, seguramente más indicados.

En todo caso, lo importante es saber qué es lo que hace. Ponerle nombre a veces lo complica.
Volver arriba Ir abajo
luckyer07
Moderador
Moderador
luckyer07


Perú Masculino 100% Cumplimiento de las normas
Reputación : 195
Mensajes enviados : 1573
Edad : 32
Premios : Ganador concurso periódico: Salvapantallas Ganador concurso "Heroe of the Summer" Ganador concurso Halloween

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 5:47 pm

bastante interesante el cronometro , genial que hayas colgado el MFA , me dejo intrigado eso del suavizado e.e , lo estudiare mas de cerca , se ve bastante completo este cronometro , le falta alarma :xD: , espero ver mas cosas asi Very Happy
Volver arriba Ir abajo
elPatrixF
Soporte
Soporte
elPatrixF


Argentina Masculino 100% Cumplimiento de las normas
Reputación : 327
Mensajes enviados : 1296
Edad : 32
Premios : Ganador concurso periódico: Demos de Aplicaciones 3º puesto concurso anual: Demos de juegos

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 6:33 pm

elpupas7 escribió:
lo malo, es que no es realmente una interpolación, ni hay desaceleración (la k es una constante). Habría desaceleración si hay variación en la constante a lo largo del tiempo o de una sucesión. Pero esto ya sería integrar esta función en otra.

Podríamos decir quizás que se trata de una "razón proporcional" aplicada a un valor dado.
Llevado al movimiento, sería una "razón proporcional" del desplazamiento.
En fin... estoy seguro que se te ocurrirán otros nombres, seguramente más indicados.
Se me ocurrió llamarlo interpolación porque de una forma o de otra va del valor X a Y completando todos los pasos intermedios con una gráfica similar a la desaceleración de un objeto con respecto al tiempo.

Suponer, esta gráfica inexacta hecha a las apuradas muestra el valor de X con el transcurso del tiempo, frame por frame, del valor X inicial acercándose a Y.
Asumir que la separación horizontal de los puntos es idéntica (?
[Tienes que estar registrado y conectado para ver esa imagen]

Yo creo que voy a llamarlo el "suavizado X+(Y-X)/S" a partir de ahora-
Va a ser lo más conveniente para acordarse la fórmula de memoria :xD:
Volver arriba Ir abajo
http://elpatrixf.com
elpupas7
Administrador
Administrador
elpupas7


España Masculino Ningúno
Reputación : 1243
Mensajes enviados : 3982
Premios : Empty (invisible) Empty (invisible) Empty (invisible) Empty (invisible)

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMar Mayo 21, 2013 7:09 pm

Vale, pero en este caso, estás pensando en la siguiente función:

f(t)=[X+(Y-X)/S]t para valores discretos de t (números naturales) entre (1..S) o bien (S..1)

Esto si que podría llamarse "suavizado" o "suavizado escalado", con total propiedad.

Y a mayor S, mayor "suavizado", como bien dices, pero también mas lento.

Si además varías la constante S a través del tiempo, S(t), consigues una amortiguación.
No me preguntes con que propósito. Alguno habrá. Para un movimiento "pendular" de cámara por ejemplo.
Volver arriba Ir abajo
Zonacas
Super-Moderador
Super-Moderador
Zonacas


España Masculino 100% Cumplimiento de las normas
Reputación : 558
Mensajes enviados : 2871
Premios : Ganador Concurso "Aniversario PacMan" 2º puesto concurso anual: Demos de juegos

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMiér Mayo 22, 2013 3:41 am

Muy bueno +R

Coincido con luckyer tal vez seria más útil si se le incluye un modo reloj con alarma Smile
Volver arriba Ir abajo
http://www.comunidadid.com/
elpupas7
Administrador
Administrador
elpupas7


España Masculino Ningúno
Reputación : 1243
Mensajes enviados : 3982
Premios : Empty (invisible) Empty (invisible) Empty (invisible) Empty (invisible)

Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitimeMiér Mayo 22, 2013 6:52 am

Función de suavizado:

[Tienes que estar registrado y conectado para ver esa imagen]

Vemos que se trata de una función escalada.
Importante ver que t, sólo opera con valores discretos, no es continuo. El rango de t va de 1 hasta S (ascendente o descendente), pero siguiendo valores naturales, es decir para S=7, sería 1, 2, 3, 4, 5, 6, 7.

Como manejamos distancias, vemos que estas varían a lo largo del tiempo, por lo que obtenemos una velocidad.
La velocidad de cambio (suavizado), dependerá del valor constante S.
A mayor S, mayor suavizado.

Gráficamente, esto se traduciría en aumento en el número de tramos y una disminución de la distancia entre ellos (altura).
Si conservamos el mismo espacio para la representación, cambiando la escala horizontal, los tramos verdes serán más cortos, pues los puntos de la variable t estarán más juntos.
Llevando esto al límite, es decir con valores de S muy grandes, obtendríamos una curva similar a la que posteó elPatrixF más arriba.

Resumiendo:

Partimos de un segmento AB, cuyos puntos A y B son constantes.
Buscamos una razón de ese segmento con la fórmula A+(B-A)/S, que no es otra cosa que una fracción (1/S) de ese segmento.
Construimos la función de suavizado, que es la del gráfico.
Se la aplicamos dónde mejor nos parezca.
Volver arriba Ir abajo
Contenido patrocinado





Simple Stopwatch (Cronómetro) Empty
MensajeTema: Re: Simple Stopwatch (Cronómetro)   Simple Stopwatch (Cronómetro) Icon_minitime

Volver arriba Ir abajo
 
Simple Stopwatch (Cronómetro)
Volver arriba 
Página 1 de 1.
 Temas similares
-
» Cronometro y 3 Estrellas
» Jueguito de naves simple
» Hacer un juego simple en TGF 2 (inglés)
» Movimiento armónico simple: Péndulo
» La forma mas simple de hacer Fade-Out entre layouts?

Permisos de este foro:No puedes responder a temas en este foro.
 :: Descargas y Recursos :: Aportes y ejemplos-
Cambiar a: