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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top