Viernes 8 de Noviembre de 2024, 08:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Mover Un Control En Tiempo De Ejecucion
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Mover Un Control En Tiempo De Ejecucion (Leído 5033 veces)
Miguel Angel Rodriguez
Nuevo Miembro
Mensajes: 21
Mover Un Control En Tiempo De Ejecucion
«
en:
Miércoles 9 de Marzo de 2005, 19:08 »
0
Hola amigos, estoy con un juego de cartas, concretamente el mus,(Ya se que está hecho, pero a mi me entretiene), las cartas las tengo en un array de controles image. De momento cuando se reparten las cartas utilizo las propiedades top y left del control, con lo que las cartas me aparecen en las posiciones prefijadas de cada jugador. Pero esta forma de resolverlo hace que el control vaya primero al punto top indicado y luego al left. es decir primero se mueve en vertical y luego en horizontal. A mi me gustaria conseguir el efecto similar al de las cartas en el juego Spider, que de una posición determinada(del mazo de cartas), el control vaya a la posición del jugador en diagonal, dando esa sensacion de desplazamiento.
Gracias de entemano por vuestra ayuda.
Como anecdota deciros que no he encontrado a ningun jugador de mus que gane al programa.
Tweet
RadicalEd
Moderador
Mensajes: 2430
Nacionalidad:
Re: Mover Un Control En Tiempo De Ejecucion
«
Respuesta #1 en:
Miércoles 9 de Marzo de 2005, 19:46 »
0
Utiliza el buscador del foro ya hay post referente al movimiento de controles en tiempo de ejecucion
El pasado son solo recuerdos, el futuro son solo sueños
ArKaNtOs
Miembro de PLATA
Mensajes: 1253
Nacionalidad:
Re: Mover Un Control En Tiempo De Ejecucion
«
Respuesta #2 en:
Miércoles 9 de Marzo de 2005, 23:19 »
0
ja, curioso hoy acabo de descargar un ejemplo de eso
aqui tienes el vinculo:
soloprogramacion
solocodigo
el punto de encuentro de los programadores
VB
,
C
,
C++
,
.Net
,
Java
,
Delphi
,
Linux
,
Programacion de Videojuegos
,
ASM
,
Dudas Informaticas
.
Miguel Angel Rodriguez
Nuevo Miembro
Mensajes: 21
Re: Mover Un Control En Tiempo De Ejecucion
«
Respuesta #3 en:
Viernes 11 de Marzo de 2005, 18:29 »
0
gracis por el enlace. He descargado el ejemplo que dices, pero no es eso lo que necesito. En ese ejemplo los controles los mueves con el ratón a tu voluntad.
Imaginad que en un punto del codigo aparece:
imgcarta(i).top=3000
imgcarta(i).left=3500
.
.
.
.
Y varias lineas más abajo vuelve a aparecer:
imgcarta(i).top=5000
imgcarta(i).left=300,,,, y que este cambio de posición lo haga en diagonal, y a ser posible despacio, como hace el solitario spider cuando reparte cartas.
Algo asi como move imgcarta(i) (300,5000)
Espero heberme explicado mejor ahora.
Saludos y gracias
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Mover Un Control En Tiempo De Ejecucion
«
Respuesta #4 en:
Sábado 12 de Marzo de 2005, 08:33 »
0
Hola Miguel Angel Rodríguez.
Lo primero que debes hacer es obtener la ecuación de la recta coreespondiente entre los dos puntos. Una vez que la tienes haz un bucle que recorra los valores para x (o y, claro) en el intervalo entre los dos puntos. Obten el valor de y para cada x mediante la ecuación punto pendiente de la recta y mueve la carta a la posición.
Algo así:
Código: Text
Option Explicit
Private Function Pendiente( _
Byval x1 as Double, byval y1 as Double _
,byval x2 as Double,Byval y2 as Double) As Double
If x2 - x1 <> 0 Then
Pendiente = (y2 - y1) / (x2 - x1)
Else
Pendiente = 1
End If
End Function
Private Function PuntoPendiente_Get_Y( _
Byval x1 as Double, byval y1 as Double _
,byval x2 as Double,Byval y2 as Double , Byval X as Double) As Double
Dim d1 As Double, d2 As Double
d1 = Pendiente(x1, y1, x2, y2)
d2 = -d1 * x1 + y1
PuntoPendiente_Get_Y = d2 + d1 * X
End Function
Private Sub Mover(Byval Index as integer, Byval DestX as Double, Byval DestY As Double)
Dim dFromX As Double, dFromY as Double
dFromX = imgcarta(index).left + imgcarta(index).width /2
dFromY = imgcarta(index).top + imgcarta(index),Height / 2
Dim dX as double
For dX = dFromX To DestX
imgCarta(index).Move dX _
, PuntoPendiente_Get_Y(dFromX, dFromY, DestX, DestY, dX)
Next dX
End Sub
La esencia del tema sería algo así, ahora bien, puedes optimizar este código muchísimo más (creando estructuras para no pasar tantas variables, hallando el valor de la pendiente de la recta al principio para hacerlo una sola vez, etc.), pero eso ya es cosa tuya.
Temas a estudiar:
- Ecuación de la recta que pasa por dos puntos.
- Pendiente de una recta.
- Ecuación punto pendiente de la recta.
Suerte.
Se me esquecía:
- También tendrás que buscarte la vida para suavizar el movimiento de la carta y evitar un efecto de flickeo. Debes incluir en el bucle un DoEvents o un Refresh para que se pueda actualizar la imagen que visualices o en tu caso para que se redibuje el control (yo me buscaría la vida para hacerlo con imágenes).
Miguel Angel Rodriguez
Nuevo Miembro
Mensajes: 21
Re: Mover Un Control En Tiempo De Ejecucion
«
Respuesta #5 en:
Lunes 14 de Marzo de 2005, 13:50 »
0
Recibido Brroz. Muchas gracias y me pongo al tajo.
Cuando lo tenga hablaremos.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Mover Un Control En Tiempo De Ejecucion