Efecto Persiana


Ir a la página 1, 2  Siguiente

Objetivo: Efecto Persiana
Hola, estaba intentando hacer bajar el formulario con un poco de aceleración para quitarle "robotismo" a su caída, pero aunque sale casi siempre bien, a veces solo me muestra una línea finísima arriba de la pantalla sin dejar caer el formulario.
¿Qué puede fallar en el siguiente código para que solo funcione a veces?

Public Sub Form_Open()

Dim t As Float
Dim g As Float
Dim v As Float
Dim ancho As Float
Dim alto As Float

Me.y = 10
Me.x = 80
ancho = Screen.Width / 3
alto = Screen.Height / 3
Me.Height = 1
Me.Width = ancho

Me.Show

g = 10
t = 0

While Me.Height < alto
t = t + 0.1
Wait 0.01
Me.height = Me.Height + (1 / 2) * g * t ^ 2
Wend

End

última edición por guadafan el Domingo, 16 Diciembre 2012, 18:07; editado 1 vez
Objetivo: Re: Efecto Persiana
Hola guadafan.

Prueba esto:

Private alto As Integer
Private temporizador As New Timer As "tiempo"

Public Sub Form_Open()

Dim ancho As Integer
'temporizador = New Timer As "tiempo"

ancho = Screen.Width / 3
alto = Screen.Height / 3

With Me
.y = 100
.x = 100
.Height = 1
.Width = ancho
End With
temporizador.Delay = 50
temporizador.Start

End

Public Sub tiempo_Timer()
If Me.Height < alto Then
Inc Me.Height
Else
temporizador.Stop
Endif
End


El objeto temporizador puedes hacerlo local.

Saludos.

última edición por Shell el Lunes, 17 Diciembre 2012, 10:12; editado 2 veces
Objetivo: Re: Efecto Persiana
No entiendo muy bien lo que has hecho. ¿El temporizador marca el ritmo de bajada? ¿Cómo podría variar su velocidad gradualmente para acelerarlo para que hiciera más una caída que una bajada a velocidad constante?

Objetivo: Re: Efecto Persiana
guadafan escribió: [Ver mensaje]
No entiendo muy bien lo que has hecho. ¿El temporizador marca el ritmo de bajada?


Si.A menor tiempo, baja mas rápidamente. Si el valor de la propiedad delay es pequeño es demasiado brusca la bajada,
hay que encontrar un valor adecuado.

guadafan escribió: [Ver mensaje]
¿Cómo podría variar su velocidad gradualmente para acelerarlo para que hiciera más una caída que una bajada a velocidad constante?


Se supone que la propiedad delay es un valor fijo.Se puede cambiar esta y jugar con el procedimiento del timer.
No parece nada fácil que no sea brusca esa bajada.

Con el uso de wait he tenido mas problema que usando un timer.Objetos nulos por ejemplo

Ejemplo de desplazamiento con botones. Es parecido a uno que circula por la red.

Saludos


MueveObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MueveObjeto.tar.gz
Tamaño: 5.91 KB
Descargado: 56 veces
MueveObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MueveObjeto.tar.gz
Tamaño: 5.91 KB
Descargado: 56 veces
MueveObjeto.tar.gz
Descripción:  
Descargar
Nombre del archivo: MueveObjeto.tar.gz
Tamaño: 5.91 KB
Descargado: 56 veces

Objetivo: Re: Efecto Persiana
oOOoh! Qué chulo!, lo estudiaré a ver qué saco en claro.
Gracias.

Objetivo: Re: Efecto Persiana
Citar:
¿Cómo podría variar su velocidad gradualmente para acelerarlo para que hiciera más una caída que una bajada a velocidad constante?


Supongo, que si quieres una "caida libre" tienes que usar para el desplazamiento en el eje Y, la ecuacion:

a231c8ec54c1b0fc986fe61e7423c898

donde:
d: indica cuando se desplaza en la coordenada Y,
g: gravedad 9.81
t: tiempo, definido en el temporizador.delay


Enlace: http://es.wikipedia.org/wiki/Ecuaciones_para_un_cuerpo_en_caida_libre

última edición por jsbsan el Martes, 18 Diciembre 2012, 17:54; editado 1 vez
Objetivo: Re: Efecto Persiana
Sí, la ecuación de la caída libre es lo primero que probé, pero me hice la picha un lío porque ya que en el ordenador es distinto a la realidad, los metros serían píxeles y el tiempo es algo que va como a pequeños "trozos", creo que habría que cambiar la aceleración con otro valor para conseguir la sensación de una caída suave (ya sea acelerada o desacelerada) en un programa.

Objetivo: Re: Efecto Persiana
¿Cómo creéis que se conseguirán mejores resultados

a) Haciendo que en cada pixel el wait sea proporcionalmente un poco mayor.

b) Haciendo que el objeto salte proporcionalmente más pixeles en cada wait.

?

(para conseguir un movimiento sin trompicones, se entiende)


REEDITADO: Esto parece más cosa de videojuegos que de aplicaciones de escritorio, la verdad

última edición por guadafan el Martes, 18 Diciembre 2012, 18:49; editado 1 vez
Objetivo: Re: Efecto Persiana
Citar:
a) Haciendo que en cada pixel el wait sea proporcionalmente un poco mayor.

No, ya que la relacion no es proporcional, sino es una potencia (tiempo elevado a 2)

Citar:

..... wait.
(para conseguir un movimiento sin trompicones, se entiende)


Yo no usaria un wait (que lo que hace es parar la ejecucion del programa el tiempo que le digas, no dejandote ejecutar mas), lo suyo es usar un control timer, que cada vez que se dispare, dibuje el formulario... y asi puedes estar ejecutando otra parte de tu programa. (asi es como lo hago en los juegos que he realizado)

Citar:
Esto parece más cosa de videojuegos que de aplicaciones de escritorio, la verdad

Estas haciendo una animación... y por lo tanto... tienes que dar la sensación de movimiento al ojo humano... para ello lo que se hace en las peliculas es cada segundo emitir 24 fotogramas y asi "da la sensación" de movimiento... tu tienes que hacer el programa de forma parecida. Tienes que redibujar cada 1/24 segundos (0.041 segundos) un fotograma (en tu caso tu formulario) en tu pantalla, y asi parecerá que se produce movimiento "sin trompicones"...

Mirate esto: Fotogramas por Segundo

He hecho un pequeño código, y creo que consigo lo que quieres...
He puesto un coeficiente (que puedes alterar con un control Slider) en la ecuación del movimiento del eje Y, para ver como se puede acelerar o desacelerar el movimiento.


Caida-0.0.1.tar.gz
Descripción: Ejemplo de Caida libre de un formulario. 
Descargar
Nombre del archivo: Caida-0.0.1.tar.gz
Tamaño: 19.59 KB
Descargado: 53 veces
Caida-0.0.1.tar.gz
Descripción: Ejemplo de Caida libre de un formulario. 
Descargar
Nombre del archivo: Caida-0.0.1.tar.gz
Tamaño: 19.59 KB
Descargado: 53 veces
Caida-0.0.1.tar.gz
Descripción: Ejemplo de Caida libre de un formulario. 
Descargar
Nombre del archivo: Caida-0.0.1.tar.gz
Tamaño: 19.59 KB
Descargado: 53 veces

Objetivo: Re: Efecto Persiana
Julio, me he tomado el atrevimiento de hacerle una pequeña modificación a tu código que hace que baje un poco más lento de acuerdo al coeficiente por el que multiplicas al divisor, el movimiento se ve bastante fluido y no "cae" tan de golpe.
La línea modificada es Me.y = (tiempo ^ 2) / (Slider1.value * 25)
Public Sub Timer1_Timer()

tiempo += Timer1.Delay

Me.y = (tiempo ^ 2) / (Slider1.value * 25)
If Me.y > Screen.Height Then Timer1.Stop

End


Quizá ayude al compañero Guadafan a conseguir el efecto deseado,jugando con dicho factor.
Saludos

última edición por Dani26 el Miercoles, 19 Diciembre 2012, 02:05; editado 1 vez
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 1.8303s (PHP: -95% SQL: 195%)
Consultas SQL: 52 - Debug off - GZIP Activado