Uno de los temas más queridos relacionados con la programación para nosotros es el tema de las Animaciones. Poco a Poco vamos a ir desarrollando ejercicios que vayan perfeccionando y mostrando distintas formas de crear animaciones en Visual Basic. Las que vimos hasta ahora usando el método Move , el control PictureClip, y las secuencias de images o pictures activadas con un Timer, son las formas más primitivas y sencillas de animación.
| |
Hoy sumamos el Método PaintPicture que dibuja una imagen sobre un fondo , pero al combinar mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen: la máscara y el sprite o animación en sí permite trasparentar el fondo. En este caso vamos a desplegar la animación sobre un control Picture con una imagen de fondo, pero podemos hacerlo sobre el formulario y cargar en este una imagen. Lo que debemos tener en cuenta es que el objeto sobre el que se despliega la animación debe estar la propiedad ScaleMode en Pixel y no en Twips como lo es por defecto. Las constantes para desplegar métodos gráficos como SRCAnd y SRCINvert deben declararse en la parte General del Formulario. Pueden copiarse a mano o a través del Visor de Apis. Usamos dos controles PictureClip uno para la máscar y otro para el Sprite (Ver Controles favoritos: PictureClip). Un Timer para desplegar la secuencia de los frames que componen la grilla en este caso la imagen completa del perro se compone de 4 columnas y 1 fila. Y un CommandButton que regula el inicio y fin de la animación. Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR dest Const SRCCOPY = &HCC0020 ' (DWORD) dest = origen Private Sub Command1_Click() If Command1.Caption = "Animación" Then Timer1.Enabled = True Picture1.Refresh 'esta propiedad Refresh es muy importante ya que refresca el fondo para 'cambiar de cuadro en la secuencia. Command1.Caption = "Detener" Else Timer1.Enabled = False Command1.Caption = "Animación" End If End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() PictureClip1.Cols = 4 PictureClip1.Rows = 1 PictureClip2.Cols = 4 PictureClip2.Rows = 1 'Es mejor determinar la composición de la grilla por código ya que a veces 'al salir del programa el control Pictureclip no retiene los valores de la 'ventana de propiedades y vuele a su 1 a 1 por defecto. End Sub Private Sub Timer1_Timer() Picture1.Refresh Dim x As Single, y As Single Static imagenactual As Integer Static xactual As Integer If imagenactual > 3 Then imagenactual = 0 If imagenactual < 0 Then imagenactual = 0 If xactual > 500 Then xactual = 0 If xactual < 0 Then xactual = 0 'Estos condicionales regulan la secuencia de los cuadros de la animación, 'reiniciándola y el movimiento cuando se escapa de la picture 'posicionándose otra vez al comienzo del margen izquierdo. Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCAND 'esta sintaxis debe estar en un solo renglón Picture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCINVERT 'esta sintaxis debe estar en un solo renglón imagenactual = imagenactual + 1 'avanza un cuadro la secuencia xactual = xactual + 20 ' se mueve 20 pixels a la derecha. End Sub |
sábado, 12 de noviembre de 2016
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario