Lona / Bitmap pregunta desplazamiento
Pregunta
Estoy tratando de hacer un pequeño juego basado en la lona en Delphi. Básicamente, me gustaría hacer una bastante grande de mapa de bits (3000x3000, por ejemplo), luego cargarla en el lienzo, y ser capaz de desplazarse hacia la derecha / izquierda / arriba / abajo al igual que un visor de imágenes ordinaria, sin embargo no puedo parecen encontrar lo que estoy buscando. Algunas ideas?
Solución
Cargar la imagen a un objeto TBitmap
fuera de la pantalla. Entonces, OnPaint
, o cuando es adecuado en su aplicación en particular, el uso BitBlt
o Canvas.Draw
para dibujar una subimagen rectangular de la TBitmap
sobre el lienzo. La subparte debe comenzar en (X, Y)
en la TBitmap
y tienen una anchura y una altura igual a ClientWidth
y ClientHeight
de la forma, respectivamente.
Ahora, responden a eventos de teclado. Escribir un controlador de eventos FormKeyDown
, y escuchar Key = VK_LEFT
, Key = VK_RIGHT
, Key = VK_UP
y Key = VK_DOWN
(utilizar una declaración case
). Cuando se detecta una clave tales siendo presionado, aumento / disminución X
o Y
, según el caso, y pintar la escena de nuevo utilizando este punto de partida.
También puede responder a las MouseDown
, MouseMove
y eventos MouseUp
para desplazarse con el ratón. O bien puede utilizar el del medio solamente (MouseMove
): Puede comprobar si el cursor se encuentra cerca de un borde de la forma, y ??si es así, desplazarse en esta dirección sin problemas (usando un TTimer
, por ejemplo). Como alternativa, se puede establecer un indicador FMouseDown
a true
en MouseDown
, y restablecerla a false
en MouseUp
. Luego, en MouseMove
, desplazarse el mapa de bits por un X-XOld
delta en la dirección x si FMouseDown
es true
, y una Y-YOld
delta en la dirección y. (Aquí, X
y Y
son parámetros del controlador de eventos MouseMove
;. (X, Y)
es la posición actual del cursor) El procedimiento MouseMove
debe terminar con
XOld := X;
YOld := Y;
no importa si FMouseDown
está encendido o apagado.