Buenas!.
Pues comencemos.
Algo que solemos hacer cuando queremos desplazar un
sprite por llamarlo de alguna forma.
Ejemplo, un cuadrado dentro de un DrawingArea. Es que si lo hacemos con teclado, tenemos
que crear un grupo de sentencias condicionales, si queremos desplazar a la izquierda, a la derecha..etc.
Eso puede alargar el código.
Podemos usar las colecciones. Imaginar que queremos mediante la pulsación de una tecla
cambiar el color de fondo de un DrawingArea. Si, podemos usar las condicionales también.
Pero podemos ahorrarnos eso.
Bien. El primer problema que me encuentro es:
Usar el evento KeyPress del propio DrawingArea para saber que tecla se ha pulsado y donde lo voy a usar ¿ no ?.
Pues no. Se debe usar el evento KeyPress del
formulario.
Tenemos un formulario con tan solo un DrawingArea:
Código:
Public Sub Form_KeyPress()
Dim colores As Collection = ["r": Color.red, "a": Color.yellow, "b": Color.blue, "v": Color.Green]
If colores.Exist(Lower(Key.text)) Then drw.Background = colores[Lower(Key.text)]
End
Podía haber añadido que se mostrase la combinación de colores en la barra de títulos, pero ahora no me acuerdo de ColorInfo.
¿ Cómo lograríamos el movimiento si fueran las teclas del cursor ?.
En este código voy a usar para desplazar la figura, los cursores y ademas el ratón. Nos interesa la parte de los cursores.
Como dicen en otro lenguaje...
...la clase rect es nuestra amiga.
Código:
Const LADO As Integer = 20
Private coordenada As Integer[] = [0, 0]
Private unrectangulo As New Rect
Private movimiento As Boolean
Public Sub Form_Open()
Me.Title = "Movimiento por mapeado de teclas"
coordenada[0] = (drw.w - LADO) / 2
coordenada[1] = (drw.h - LADO) / 2
End
Public Sub Form_KeyPress()
Dim direccion As Collection = [Str(Key.Left): [-5, 0], Str(Key.Right): [5, 0], Str(Key.up): [0, -5], Str(Key.Down): [0, 5]]
If direccion.Exist(Str(Key.code)) Then
coordenada[0] += direccion[Key.code][0]
coordenada[1] += direccion[Key.code][1]
drw.Refresh
Endif
End
Public Sub drw_Draw()
With unrectangulo
.X = coordenada[0]
.y = coordenada[1]
.W = LADO
.H = LADO
End With
Paint.LineWidth = 2
Paint.Brush = Paint.Color(Color.Green)
Paint.Rectangle(coordenada[0], coordenada[1], LADO, LADO)
Paint.Stroke
End
Public Sub drw_MouseDown()
If unrectangulo.Contains(Mouse.x, Mouse.Y) Then movimiento = True
End
Public Sub drw_MouseMove()
If movimiento Then
coordenada[0] = Mouse.x - LADO / 2
coordenada[1] = Mouse.y - LADO / 2
Endif
drw.Refresh
End
Public Sub drw_MouseUp()
movimiento = False
End
Como sabéis la clave de una colección es una cadena que es lo que uso al convertir el código de la tecla pulsada.
Si imprimiésemos una de las teclas del cursor, no veríamos mucho en la consola de Gambas
Y ahora voy a intentar subir el código.
No he usado velocidad. Según sea derecha, izquierda, arriba o abajo. Siempre uso un valor constante de cinco que o bien sumo o resto
a la coordenada x o y. Si lo sé no he usado diagonales...eso seria complicarlo.
Saludos
Pues no parece que se vea el formato del código de Gambas.