El uso de directdraw con delphi


Esto muestra cómo empezar a usar el DirectX biblioteca en Delphi programas y, a continuación, se muestra una aplicación sencilla utilizando el software gratuito de la biblioteca DelphiX.
Si alguna vez has tratado de hacer rápida salida de la pantalla en Windows, usted sabrá que no es una tarea fácil. Con todos los trucos posibles que aún está lamentablemente muy lejos de lo comercial velocidades de juego. Pero te voy a mostrar cómo utilizar DirectX en sus aplicaciones para hacer suave de salida rápida que puede ser medido en microsegundos no en minutos!
hace Un par de años, Microsoft, los desarrolladores se dieron cuenta de que Windows no era una plataforma de juegos y se comprometió a cambiar esto. En 1995, la corta duración del Ala apareció. Esto permitió salida rápida en modos de 256 colores en windows 3.1 y windows 95. Fue rápido, pero limitado, y pronto reemplazado por DirectX. Esta es una familia de APIs para una rápida salida y de entrada. Sus aplicaciones pueden utilizar tarjetas de vídeo, tarjetas de sonido, e incluso force feedback joystick a través de DirectX. Voy a mirar en DirectDraw la visual de la API y volver a los otros en el futuro. Otras Api de DirectX incluyen DirectSound para tarjetas de sonido, DirectInput para joysticks, etc, Direct3d para gráficos 3d y DirectPlay para multi-jugador. A pesar de DirectX está ahora en la versión 6.1, DirectDraw ha sido prácticamente sin cambios desde la versión 3. La versión 3 BTW es el construido en Win NT 4.0.
Windows de la fuerza, es que funciona con muchos tipos de monitores, tarjetas de video y en varias resoluciones y profundidades de color. Esto requiere una gran cantidad de código entre la Aplicación y el hardware de tarjeta de vídeo y de este 'Grueso de la Api' es la razón por la salida de Windows rutinas son lentos. Esto también es cierto con Dos cuando apareció por primera vez, y los juegos de los desarrolladores fue directamente a la pieza de metal en lugar de utilizar el BIOS o DOS rutinas de API. Hasta hace dos años, la mayoría de los juegos todavía estaban escritas para Dos, incluso aquellos que se ejecuta bajo Windows 95. Ahora, probablemente el 99% de uso de DirectX y de pronto parece que Windows CE micros serán de conducción comercial de máquinas de arcade con DirectX.
DirectX/DirectDraw admite una fina enfoque de la API con pocas capas entre el hardware y su Aplicación. DirectX es construido en COM, el Modelo de Objetos de Componentes, de modo que las nuevas versiones pueden ser liberados sin romper su código existente. Si la Aplicación funciona con la versión de DirectX 5, está garantizado para trabajar con DirectX 6, 7 ...308!
DirectDraw proporciona información para su Aplicación acerca de lo que las características de hardware de vídeo o la tarjeta de sonido tiene, y lo que es emulado por software. Esta DirectX enfoque garantiza que el software funcionará en las tarjetas que aún no se ha diseñado y será capaz de utilizar sus características avanzadas. En el lado negativo, esto significa que usted tiene que escribir dos o tres formas diferentes de hacer las cosas y elegir la mejor (= más rápido) método en tiempo de ejecución.
DirectX y Delphi
a Pesar de que C y C son los principales idiomas de la ifor DirectX, Delphi es muy adecuado para ir. Blake Stone hizo la primera DirectX encabezado de la traducción de C a Delphi y Borland Charlie Calvert ha cepillado sobre el tema en su Delphi 2/4 'Desatado' libros. El señor Hiroyuki Hori en Japón desarrolló DelphiX - un excelente juego de gratis de componentes Delphi para DirectX. Estos están disponibles en muchos sitios en la Red o en su página de inicio en http://www.ingjapan.ne.jp/hori/. Usted también tendrá que instalar DirectX versión 5 o superior. Es probable que usted haya en el sistema ya que si has comprado un juego en el último año. En Windows 98 y el futuro NT5 vienen con DirectX construido en. NT 4 Service Pack 3 también soporta DirectX 3.0.
ahora mostraré las cosas esenciales de la DirectDraw de programación y cómo obtener lo mejor de la DelphiX componentes con una Aplicación de ejemplo. Si utiliza DelphiX, usted encontrará que el Señor Hori los archivos de ayuda que tal vez no son de cristal claro, pero usted consigue el código fuente completo y un buen número de programas de ejemplo para superar esto. DelphiX es una magnífica pieza de software y usted podría escribir cerca de arcade juegos de calidad en Delphi utilizando.

Incluso si usted no está en los juegos de la programación, la velocidad extra que DirectDraw ofrece le permite crear aplicaciones con el parpadeo de alta velocidad gratuito de salida como el radar muestra, osciloscopios, desplazamiento de mapas etc. Lo he utilizado para un desplazamiento de mapa y dibuja una pantalla llena de 256 colores hexágonos de 1024 x 768 de resolución (cada hex cabe en un rectángulo de 32 píxeles de ancho por 34 de profundidad) en 26 ms en un P2 300 equipado con un AGP de Matrox Millenium de la tarjeta. Casi 40 fotogramas por segundo, nada mal para Delphi..
En DirectDraw, Microsoft no tiraron la GDI. Uno de los grandes dolores de Dos desarrollo del juego fue la salida de texto, en particular la necesidad de crear tus propias fuentes o mensaje de mapas de bits. Afortunadamente, el GDI trabaja con DirectDraw, de modo que las fuentes Truetype se pueden utilizar. De hecho, la mayoría de la GDI obras, siempre y cuando un poco de cuidado. Por supuesto, la salida GDI no es muy rápido, por lo que realmente sólo debería utilizar para la creación de texto, menús, etc.
introducción
Usted necesitará el DirectX archivos de encabezado - no hay mejor lugar que el DelphiX de la biblioteca. El adaptador de Directx.pas es de la friolera de 300 kb de tamaño. Incluye todas las DirectSound etc Api de registros, los Guid etc. Si usted ha estado preguntando en el desierto de Gobi en los últimos cinco años, puede que no esté familiarizado con Guid, pero son simplemente una colección de números como este ['{5C690320-0BD2-11D3-89DF-00409545E8E7}'] que identificar objetos y clases en Windows. Microsoft cuidadosamente poner GUID que contiene sus tarjetas de red' Dirección Mac en todos los archivos de Word y Excel creado en su PC. Si haces Ctrl + Mayús + G en el Ide de Delphi, de los últimos 12 dígitos de la GUID generados son sus tarjetas de red Dirección Mac (si usted tiene una tarjeta de red).
DirectDraw no es difícil trabajar con, sólo un poco más incómoda en algunos lugares. Aquí está mi de cinco puntos para guiar a los principiantes a empezar. Crear primero un objeto DirectDraw. Esto representa una tarjeta de vídeo/monitor, y bajo Windows 98 será compatible con multitud de dispositivos. Esta es la definición de DirectDrawCreate.
función DirectDrawCreate
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp (lpGUID: PGUID
fuera de lplpDD: IDirectDraw
& nbsp & nbsp & nbsp & nbsp pUnkOuter: IUnknown): HRESULT
en cualquier Lugar hay un parámetro pUnkOuter, sólo tiene que pasar nada. Esta llamada debe devolver un DD_OK valor (=0). Cualquier otra cosa es un error y debe ser manejado por el código..
el segundo Paso es especificar la cooperativa nivel. ¿Desea toda la pantalla de forma exclusiva o compartirlo? La mayoría de los juegos se ejecutan en modo de pantalla completa, por lo que su aplicación puede elegir el modo de pantalla y resolución a utilizar. Si se utiliza en una ventana, su aplicación no debe cambiar de modo.
El dwFlags parámetro permite especificar si se utiliza la pantalla completa o no, o si la aplicación de los controles de la pantalla, de modo que ninguna otra aplicación puede cambiar e incluso si el usuario puede Ctrl-Alt-Supr para reiniciar.
función SetCooperativeLevel(hWnd: HWND dwFlags: DWORD): HRESULT
Su posible pedir al objeto DirectDraw para todos los modos de vídeo compatibles. La mayoría de las tarjetas de vídeo de apoyo de muchos modos, pero la mayor frecuencia de los modos de color puede necesitar un ancho de banda mayor que el monitor puede soportar. El cambio a estos modos no va a funcionar y podría dejar el monitor en un unsynched estado, así que asegúrese de incluir un descargo de responsabilidad al distribuir tus aplicaciones! Mejor aún, conseguir que el usuario elija el modo de una lista. El terremoto y muchos juegos utilizan este enfoque.
Paso 3 se establece el modo de pantalla. Esto sólo se aplica si usted desea pleno acceso a la pantalla.
función SetDisplayMode(dwWidth, dwHeight, dwBpp: DWORD): HRESULT
dwBpp es Bits por píxel, es decir, 8 de 256 colores. 640x 480 8 es, probablemente, una apuesta segura en cualquier PC!
Paso 4 es donde las superficies se crean. Todas las imágenes se celebran en las superficies. Estos son sólo los bloques de memoria ram con un opcional de la paleta y su aplicación puede crear superficies en el PC principal de la ram del sistema, o en la tarjeta de video ram. No hay premios por adivinar que las imágenes de vídeo ram imágenes más rápido para copiar de ram de vídeo, aunque las tarjetas AGP puede mover los datos desde su PC ram muy rápidamente.
CreateSurface crea una superficie de acuerdo a la superficie de la descripción del parámetro.
función CreateSurface(const lpDDSurfaceDesc: DDSURFACEDESC
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fuera lplpDDSurface: IDirectDrawSurface pUnkOuter: IUnknown): HRESULT
La superficie principal representa la pantalla y es conocida como la Superficie Principal. La actualización de este directamente puede conducir a la pantalla de trama de la captura de imágenes como son. Esto le da un corte o desgarro efecto y se puede evitar mediante el uso de otro bloque de ram de vídeo como un Tampón. La Superficie Principal se muestra siempre, pero su aplicación siempre escribe en la parte de atrás de búfer y, a continuación, llama al método de volteo. Esto hace que la Principal Superficie y contenido del Buffer para intercambiar las posiciones y su monitor muestra la nueva imagen Que es el secreto de suave animación por ordenador y pueden ocurrir hasta 70 veces por segundo.

Una Superficie Principal de 1024 x 768 en 256 colores y un búfer posterior toma de 1.5 Mb de ram de vídeo. Así que una tarjeta de vídeo con 4 mb de vídeo ram será de sólo 2.5 Mb izquierda para almacenamiento de imágenes. Es posible que prefiera para asignar un bloque de memoria ram principal de la memoria de la PC, hacer todas las manipulaciones en eso y, a continuación, copie este a la tarjeta de vídeo a la superficie para ser mostrado. Hay muchas técnicas para la optimización de la velocidad de actualización y parte de la diversión está tratando de llevarlos a cabo. Mantener un registro de bits de la pantalla ha cambiado y sólo la copia de bits es una manera de minimizar el tráfico. No todo el mundo tiene AGP, así que usted debe probar su aplicación en tantos equipos como sea posible.
Que es realmente todo lo que hay. El paso 5 es sentarse y pensar - wow - ahora puedo utilizar DirectDraw. Hay un par de menor complejidad como conseguir tus imágenes de mapa de bits o archivos de recursos en una superficie de DirectDraw. El mapa de bits tiene que ser cargado en la memoria y luego copiar en la parte de atrás de búfer.. mapas de bits de Windows contiene una paleta y se almacenan normalmente al revés. Usted puede tener más diversión de codificación de este usted mismo o utilizar el DelphiX de la biblioteca de componentes para el mapa de bits y administración de la paleta.
Acceso Directo a la Ram de Vídeo
Si tu Aplicación tiene que modificar directamente los píxeles en la memoria de vídeo, a continuación, debe especificar un área rectangular, llamada de bloqueo para obtener acceso exclusivo a la memoria ram, alterar o leer los píxeles y, finalmente, la llamada de desbloqueo para liberarlo. El código de Bloqueo y Desbloqueo debe ser breve como de Windows se detiene.
Ver el terreno de juego!
No no es por el fútbol. Cada superficie tiene un tono. Su ajustado a la anchura en bytes. Si usted manipular imágenes en el nivel de byte, usted debe ser consciente de ello. El tono de una superficie es a menudo diferente a la anchura. Cada píxel de la línea comienza 'pitch' bytes a partir de la anterior. Esto puede suceder debido a que el ancho de un número impar de bytes y el tono redondea a la unidad más cercana de palabra doble o es sólo la forma de la tarjeta de video lo hace. El ancho puede ser de 105, pero el tono de voz podría ser 108. La primera línea es de 0 bytes desde el inicio, el próximo 108, a continuación, 216 y así sucesivamente.
GDI
el Uso de la GDI no es un gran problema. El idg es un poco atascado en sus maneras y siempre utiliza el mismo bloque de memoria ram de vídeo. Esto significa que un mensaje del sistema (como una excepción no controlada) no puede aparecer si está utilizando la página de mover de un tirón y mostrar el otro bloque de memoria ram. Sin embargo, usted puede llamar a fliptoGDI para hacer que la superficie principal de ser el GDI o GetGDISurface para obtener un puntero a la superficie del objeto.


a Perder Tus Datos
Perder las imágenes en video ram es un problema menor si el usuario hace un Alt-Tab. Todo está perdido. Sin embargo DirectX sigue la pista de los 'perdido' el estado de las superficies y de dar una 'Superficie Perdido' de error si intenta utilizarlo. Su aplicación debe tener un controlador para recrear las superficies y volver a cargar las imágenes.
Los inconvenientes....
La principal es que la depuración completa de la pantalla de Apps de DirectX es difícil. El acceso a la memoria de vídeo es hecho por el cese temporal de Windows. A menos que usted se sienta cómodo trabajando en el nivel más bajo, esto puede ser un paseo en SoftIce territorio, no hay manera en la tierra que se le puede dar un paso a través de su código entre un Bloqueo..desbloquear par. Un camino de ronda que esto es el uso de un volcado de procedimiento para concatenar cadenas de parámetros a un archivo de registro, o una ventana de depuración como en Gexperts.
Si usted sabe C o C de curso de Microsoft proporcionar un servicio de DirectDraw SDK con muchos ejemplos y, probablemente, el más informativo de archivo de ayuda que he visto nunca. Recomiendo la 'Dentro de DirectX' libro de Microsoft press para todos en la información de fondo acerca de DirectX. Microsoft Press ISBN: 1572316969. Una alternativa libro es Windows Programación de juegos para Dummies por Andre Lamothe editorial IDG Books Worldwide Inc. ISBN: 0764503375, pero de nuevo esto es C/C base.
Delphix
Haber aprendido cómo hacer simple DirectDraw cosas en Delphi ahora tiene una opción - a desarrollar sus propios componentes o el uso de los definidos para usted - como DelphiX. No tengo ninguna relación con el autor, excepto admiración por un excelente trabajo y su generosidad al dar a la basura. Si usted es nuevo a DelphiX, puede ser un poco abrumador, y le sugiero que imprima las muestras y demostraciones y estudio en detalle. Aquí está mi resumen sobre el uso de ellos.
Una TdxForm es una forma modificada que debe ser utilizado como el antepasado forma, no TForm - ¿algún mensaje de control, incluyendo el manejo de excepciones y la conmutación de la superficie principal de GDI, así que usted puede ver los mensajes. Un DxDraw componente es caer en ella y establecer las propiedades para la resolución y profundidad de color. Esto ha controladores de eventos para lidiar con la inicialización y terminación del objeto. Estos controladores son que su aplicación se debe hacer la carga de imágenes y preparación para el bucle de juego.
El bucle principal del juego es en realidad un temporizador impulsado controlador de eventos. El temporizador se mantiene un seguimiento de cualquier lag, así que usted puede ver si el código está tomando demasiado tiempo para ejecutar.
Hay imagen y imagelist componentes que permiten configurar imágenes de mapa de bits en tiempo de diseño y se puede especificar en que tipo de memoria ram (sistema de PC o de Vídeo) las imágenes se colocan.
& nbsp Un RestoreSurface controlador proporcionado por lo que su aplicación puede cargar imágenes después de que el usuario Alt-Tab y pierde el contenido de la memoria ram de vídeo.
El TDirectDrawSurface clase implementa casi toda la superficie de DirectX funcionalidad. Las superficies se pueden crear en cualquier lugar, de cualquier tamaño y las imágenes blitted rápidamente con la opción de la escala y la rotación entre las superficies. La mayoría de las tarjetas de video tienen un hardware de blitter y DirectDraw va a utilizar esto. Imágenes rara vez son rectangulares, pero siempre se definen en un bloque rectangular. Un mapa de la rutina de dibujo dibuja 150 hexágonos en menos de 4 ms es decir, cada uno tiene alrededor de 26 microsegundos.
la Creación de un nuevo búfer se realiza automáticamente si el Dxdraw.Doflip opción es verdad. Tenga en cuenta que la salida va a la parte de atrás de búfer en ese caso, y no ver nada hasta dxdraw.flip se llama. Si el doflip opción es falsa, como en el que se ejecuta en una ventana de salida que va directo y no necesita llamar a dxdraw.flip (a pesar de que no hace daño).
El Código de Radar.Exe.
En 370 líneas de código, he escrito una pequeña simulación de las aeronaves que vuelan en direcciones al azar - esto es muy simple funcionalidad, así que no esperes la detección de colisiones y explosiones!. Son las teclas ESC para salir, 'a' para agregar un avión y Alt-1, 2 o 3 para cambiar a mayores resoluciones de pantalla de 640 por 480, 800 x 600 y 1024 x 768.
La aeronave en tres colores diferentes volar de forma aleatoria a través de la pantalla ligeramente diferentes velocidades y rumbos y algunos de flash. Hay 25 a empezar, pero mantenga pulsada la tecla y el número seguirá en aumento rápidamente. La aeronave se muestran como rectángulos que rodea la pantalla de coordenadas, y este texto es la salida de la Gdi TextOut rutina de esto ralentiza las cosas un poco. Para ver el efecto de esto, intente con 100 aviones, a continuación, comentar estas líneas abajo en el método tPlane.MovenDraw y vuelva a ejecutar. Todo lo que se muestra es la que encierra marco. Este es dibujado por un poco de montaje código estaba mostrando!
si fflashcount >=0,
& nbsp & nbsp & nbsp & nbsp con fdxdraw.De la superficie.Lienzo de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp pincel.color := fcolor
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp str := inttostr(fx) inttostr(fy)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp textout(fx,fy,str)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp liberación
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
Observe que el uso de la liberación en este trozo de código. Este es un método de TDirectDrawSurface y libera el identificador de la base del Contexto de presentación. En cualquier momento que usted utilice una llamada Gdi debe llamar a la liberación.
ahora, Usted puede tener un montón más de aeronaves (bueno marcos rectangulares) sin problemas zumbando alrededor de la pantalla. Vale la pena probarlo con el volteo de activado y desactivado a ver qué diferencia si la hubiera, que hace.
Cómo funciona.
gran parte de el burro de trabajo se realiza mediante la configuración de las propiedades de la DXDraw componente.- por ejemplo la resolución de la Pantalla, pantalla completa o en ventana, doFlip, etc, etc.
yo uso un tstringlist para cada aeronave objeto. Estos son creados con el azar de las coordenadas y las direcciones de movimiento. En el temporizador del controlador, todos los aviones se mueven cada marco por el azar x e y especificadas las compensaciones, rebotando en los bordes de la pantalla. La pantalla se borra y todas las aeronaves a dibujar cada vez.
El texto en la parte superior izquierda muestra cómo muchas de las aeronaves están en la pantalla y el gal. Normal lag valor es 1. Todo está de salida en un marco. Si esto llega a 2 o más (lean sobre la tecla), el movimiento de los aviones se vuelve desigual, ya que se está tomando más tiempo de un marco período de dibujar. Trate de evitar esto!
no Manuar método dibuja el marco de los rectángulos en blanco y es muy rápido. Tanto en este como en los no usados método Drawrect son buenos ejemplos de acceso directo de ram de vídeo a través de la Cerradura..Desbloquear y tanto las rutinas como el uso de la cancha de los miembros de la Superficie Descriptor (dds) para desplazarse hacia abajo a partir de un píxel de la línea a la siguiente.
Notas para Delphi 4.0 y NT 4.0, los Usuarios
Hay dos versiones de DelphiX disponibles y ambos se trabajo con Delphi 3.0, el anterior tiene un pequeño archivo Zip (606Kb). La segunda (841Kb) tiene algunas Delphi 4.0 código específico (la sobrecarga y los parámetros por defecto) y compatible con DirectX 6, pero los programas construida con ella, NO va a correr en Win NT 4.0 en lugar obtendrá el error 'Interfaz no compatible'. El uso de la versión anterior en ese caso.
& & & & & & & & & & -
El archivo zip que incluye tiene archivos de código fuente, pero no el código DirectX. Este puede ser descargado desde http://www.yks.ne.jp/'hori/DelphiX-e.html o en varios otros lugares.
El archivo de este artículo puede ser descargado aquí ddraw.ZIP









El uso de directdraw con delphi


El uso de directdraw con delphi : Multi-millones de consejos para hacer su vida mas facil.


Esto muestra como empezar a usar el DirectX biblioteca en Delphi programas y, a continuacion, se muestra una aplicacion sencilla utilizando el software gratuito de la biblioteca DelphiX.
Si alguna vez has tratado de hacer rapida salida de la pantalla en Windows, usted sabra que no es una tarea facil. Con todos los trucos posibles que aun esta lamentablemente muy lejos de lo comercial velocidades de juego. Pero te voy a mostrar como utilizar DirectX en sus aplicaciones para hacer suave de salida rapida que puede ser medido en microsegundos no en minutos!
hace Un par de años, Microsoft, los desarrolladores se dieron cuenta de que Windows no era una plataforma de juegos y se comprometio a cambiar esto. En 1995, la corta duracion del Ala aparecio. Esto permitio salida rapida en modos de 256 colores en windows 3.1 y windows 95. Fue rapido, pero limitado, y pronto reemplazado por DirectX. Esta es una familia de APIs para una rapida salida y de entrada. Sus aplicaciones pueden utilizar tarjetas de video, tarjetas de sonido, e incluso force feedback joystick a traves de DirectX. Voy a mirar en DirectDraw la visual de la API y volver a los otros en el futuro. Otras Api de DirectX incluyen DirectSound para tarjetas de sonido, DirectInput para joysticks, etc, Direct3d para graficos 3d y DirectPlay para multi-jugador. A pesar de DirectX esta ahora en la version 6.1, DirectDraw ha sido practicamente sin cambios desde la version 3. La version 3 BTW es el construido en Win NT 4.0.
Windows de la fuerza, es que funciona con muchos tipos de monitores, tarjetas de video y en varias resoluciones y profundidades de color. Esto requiere una gran cantidad de codigo entre la Aplicacion y el hardware de tarjeta de video y de este 'Grueso de la Api' es la razon por la salida de Windows rutinas son lentos. Esto tambien es cierto con Dos cuando aparecio por primera vez, y los juegos de los desarrolladores fue directamente a la pieza de metal en lugar de utilizar el BIOS o DOS rutinas de API. Hasta hace dos años, la mayoria de los juegos todavia estaban escritas para Dos, incluso aquellos que se ejecuta bajo Windows 95. Ahora, probablemente el 99% de uso de DirectX y de pronto parece que Windows CE micros seran de conduccion comercial de maquinas de arcade con DirectX.
DirectX/DirectDraw admite una fina enfoque de la API con pocas capas entre el hardware y su Aplicacion. DirectX es construido en COM, el Modelo de Objetos de Componentes, de modo que las nuevas versiones pueden ser liberados sin romper su codigo existente. Si la Aplicacion funciona con la version de DirectX 5, esta garantizado para trabajar con DirectX 6, 7 ...308!
DirectDraw proporciona informacion para su Aplicacion acerca de lo que las caracteristicas de hardware de video o la tarjeta de sonido tiene, y lo que es emulado por software. Esta DirectX enfoque garantiza que el software funcionara en las tarjetas que aun no se ha diseñado y sera capaz de utilizar sus caracteristicas avanzadas. En el lado negativo, esto significa que usted tiene que escribir dos o tres formas diferentes de hacer las cosas y elegir la mejor (= mas rapido) metodo en tiempo de ejecucion.
DirectX y Delphi
a Pesar de que C y C son los principales idiomas de la ifor DirectX, Delphi es muy adecuado para ir. Blake Stone hizo la primera DirectX encabezado de la traduccion de C a Delphi y Borland Charlie Calvert ha cepillado sobre el tema en su Delphi 2/4 'Desatado' libros. El señor Hiroyuki Hori en Japon desarrollo DelphiX - un excelente juego de gratis de componentes Delphi para DirectX. Estos estan disponibles en muchos sitios en la Red o en su pagina de inicio en http://www.ingjapan.ne.jp/hori/. Usted tambien tendra que instalar DirectX version 5 o superior. Es probable que usted haya en el sistema ya que si has comprado un juego en el ultimo año. En Windows 98 y el futuro NT5 vienen con DirectX construido en. NT 4 Service Pack 3 tambien soporta DirectX 3.0.
ahora mostrare las cosas esenciales de la DirectDraw de programacion y como obtener lo mejor de la DelphiX componentes con una Aplicacion de ejemplo. Si utiliza DelphiX, usted encontrara que el Señor Hori los archivos de ayuda que tal vez no son de cristal claro, pero usted consigue el codigo fuente completo y un buen numero de programas de ejemplo para superar esto. DelphiX es una magnifica pieza de software y usted podria escribir cerca de arcade juegos de calidad en Delphi utilizando.

Incluso si usted no esta en los juegos de la programacion, la velocidad extra que DirectDraw ofrece le permite crear aplicaciones con el parpadeo de alta velocidad gratuito de salida como el radar muestra, osciloscopios, desplazamiento de mapas etc. Lo he utilizado para un desplazamiento de mapa y dibuja una pantalla llena de 256 colores hexagonos de 1024 x 768 de resolucion (cada hex cabe en un rectangulo de 32 pixeles de ancho por 34 de profundidad) en 26 ms en un P2 300 equipado con un AGP de Matrox Millenium de la tarjeta. Casi 40 fotogramas por segundo, nada mal para Delphi..
En DirectDraw, Microsoft no tiraron la GDI. Uno de los grandes dolores de Dos desarrollo del juego fue la salida de texto, en particular la necesidad de crear tus propias fuentes o mensaje de mapas de bits. Afortunadamente, el GDI trabaja con DirectDraw, de modo que las fuentes Truetype se pueden utilizar. De hecho, la mayoria de la GDI obras, siempre y cuando un poco de cuidado. Por supuesto, la salida GDI no es muy rapido, por lo que realmente solo deberia utilizar para la creacion de texto, menus, etc.
introduccion
Usted necesitara el DirectX archivos de encabezado - no hay mejor lugar que el DelphiX de la biblioteca. El adaptador de Directx.pas es de la friolera de 300 kb de tamaño. Incluye todas las DirectSound etc Api de registros, los Guid etc. Si usted ha estado preguntando en el desierto de Gobi en los ultimos cinco años, puede que no este familiarizado con Guid, pero son simplemente una coleccion de numeros como este ['{5C690320-0BD2-11D3-89DF-00409545E8E7}'] que identificar objetos y clases en Windows. Microsoft cuidadosamente poner GUID que contiene sus tarjetas de red' Direccion Mac en todos los archivos de Word y Excel creado en su PC. Si haces Ctrl + Mayus + G en el Ide de Delphi, de los ultimos 12 digitos de la GUID generados son sus tarjetas de red Direccion Mac (si usted tiene una tarjeta de red).
DirectDraw no es dificil trabajar con, solo un poco mas incomoda en algunos lugares. Aqui esta mi de cinco puntos para guiar a los principiantes a empezar. Crear primero un objeto DirectDraw. Esto representa una tarjeta de video/monitor, y bajo Windows 98 sera compatible con multitud de dispositivos. Esta es la definicion de DirectDrawCreate.
funcion DirectDrawCreate
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp (lpGUID: PGUID
fuera de lplpDD: IDirectDraw
& nbsp & nbsp & nbsp & nbsp pUnkOuter: IUnknown): HRESULT
en cualquier Lugar hay un parametro pUnkOuter, solo tiene que pasar nada. Esta llamada debe devolver un DD_OK valor (=0). Cualquier otra cosa es un error y debe ser manejado por el codigo..
el segundo Paso es especificar la cooperativa nivel. ¿Desea toda la pantalla de forma exclusiva o compartirlo? La mayoria de los juegos se ejecutan en modo de pantalla completa, por lo que su aplicacion puede elegir el modo de pantalla y resolucion a utilizar. Si se utiliza en una ventana, su aplicacion no debe cambiar de modo.
El dwFlags parametro permite especificar si se utiliza la pantalla completa o no, o si la aplicacion de los controles de la pantalla, de modo que ninguna otra aplicacion puede cambiar e incluso si el usuario puede Ctrl-Alt-Supr para reiniciar.
funcion SetCooperativeLevel(hWnd: HWND dwFlags: DWORD): HRESULT
Su posible pedir al objeto DirectDraw para todos los modos de video compatibles. La mayoria de las tarjetas de video de apoyo de muchos modos, pero la mayor frecuencia de los modos de color puede necesitar un ancho de banda mayor que el monitor puede soportar. El cambio a estos modos no va a funcionar y podria dejar el monitor en un unsynched estado, asi que asegurese de incluir un descargo de responsabilidad al distribuir tus aplicaciones! Mejor aun, conseguir que el usuario elija el modo de una lista. El terremoto y muchos juegos utilizan este enfoque.
Paso 3 se establece el modo de pantalla. Esto solo se aplica si usted desea pleno acceso a la pantalla.
funcion SetDisplayMode(dwWidth, dwHeight, dwBpp: DWORD): HRESULT
dwBpp es Bits por pixel, es decir, 8 de 256 colores. 640x 480 8 es, probablemente, una apuesta segura en cualquier PC!
Paso 4 es donde las superficies se crean. Todas las imagenes se celebran en las superficies. Estos son solo los bloques de memoria ram con un opcional de la paleta y su aplicacion puede crear superficies en el PC principal de la ram del sistema, o en la tarjeta de video ram. No hay premios por adivinar que las imagenes de video ram imagenes mas rapido para copiar de ram de video, aunque las tarjetas AGP puede mover los datos desde su PC ram muy rapidamente.
CreateSurface crea una superficie de acuerdo a la superficie de la descripcion del parametro.
funcion CreateSurface(const lpDDSurfaceDesc: DDSURFACEDESC
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fuera lplpDDSurface: IDirectDrawSurface pUnkOuter: IUnknown): HRESULT
La superficie principal representa la pantalla y es conocida como la Superficie Principal. La actualizacion de este directamente puede conducir a la pantalla de trama de la captura de imagenes como son. Esto le da un corte o desgarro efecto y se puede evitar mediante el uso de otro bloque de ram de video como un Tampon. La Superficie Principal se muestra siempre, pero su aplicacion siempre escribe en la parte de atras de bufer y, a continuacion, llama al metodo de volteo. Esto hace que la Principal Superficie y contenido del Buffer para intercambiar las posiciones y su monitor muestra la nueva imagen Que es el secreto de suave animacion por ordenador y pueden ocurrir hasta 70 veces por segundo.

Una Superficie Principal de 1024 x 768 en 256 colores y un bufer posterior toma de 1.5 Mb de ram de video. Asi que una tarjeta de video con 4 mb de video ram sera de solo 2.5 Mb izquierda para almacenamiento de imagenes. Es posible que prefiera para asignar un bloque de memoria ram principal de la memoria de la PC, hacer todas las manipulaciones en eso y, a continuacion, copie este a la tarjeta de video a la superficie para ser mostrado. Hay muchas tecnicas para la optimizacion de la velocidad de actualizacion y parte de la diversion esta tratando de llevarlos a cabo. Mantener un registro de bits de la pantalla ha cambiado y solo la copia de bits es una manera de minimizar el trafico. No todo el mundo tiene AGP, asi que usted debe probar su aplicacion en tantos equipos como sea posible.
Que es realmente todo lo que hay. El paso 5 es sentarse y pensar - wow - ahora puedo utilizar DirectDraw. Hay un par de menor complejidad como conseguir tus imagenes de mapa de bits o archivos de recursos en una superficie de DirectDraw. El mapa de bits tiene que ser cargado en la memoria y luego copiar en la parte de atras de bufer.. mapas de bits de Windows contiene una paleta y se almacenan normalmente al reves. Usted puede tener mas diversion de codificacion de este usted mismo o utilizar el DelphiX de la biblioteca de componentes para el mapa de bits y administracion de la paleta.
Acceso Directo a la Ram de Video
Si tu Aplicacion tiene que modificar directamente los pixeles en la memoria de video, a continuacion, debe especificar un area rectangular, llamada de bloqueo para obtener acceso exclusivo a la memoria ram, alterar o leer los pixeles y, finalmente, la llamada de desbloqueo para liberarlo. El codigo de Bloqueo y Desbloqueo debe ser breve como de Windows se detiene.
Ver el terreno de juego!
No no es por el futbol. Cada superficie tiene un tono. Su ajustado a la anchura en bytes. Si usted manipular imagenes en el nivel de byte, usted debe ser consciente de ello. El tono de una superficie es a menudo diferente a la anchura. Cada pixel de la linea comienza 'pitch' bytes a partir de la anterior. Esto puede suceder debido a que el ancho de un numero impar de bytes y el tono redondea a la unidad mas cercana de palabra doble o es solo la forma de la tarjeta de video lo hace. El ancho puede ser de 105, pero el tono de voz podria ser 108. La primera linea es de 0 bytes desde el inicio, el proximo 108, a continuacion, 216 y asi sucesivamente.
GDI
el Uso de la GDI no es un gran problema. El idg es un poco atascado en sus maneras y siempre utiliza el mismo bloque de memoria ram de video. Esto significa que un mensaje del sistema (como una excepcion no controlada) no puede aparecer si esta utilizando la pagina de mover de un tiron y mostrar el otro bloque de memoria ram. Sin embargo, usted puede llamar a fliptoGDI para hacer que la superficie principal de ser el GDI o GetGDISurface para obtener un puntero a la superficie del objeto.


a Perder Tus Datos
Perder las imagenes en video ram es un problema menor si el usuario hace un Alt-Tab. Todo esta perdido. Sin embargo DirectX sigue la pista de los 'perdido' el estado de las superficies y de dar una 'Superficie Perdido' de error si intenta utilizarlo. Su aplicacion debe tener un controlador para recrear las superficies y volver a cargar las imagenes.
Los inconvenientes....
La principal es que la depuracion completa de la pantalla de Apps de DirectX es dificil. El acceso a la memoria de video es hecho por el cese temporal de Windows. A menos que usted se sienta comodo trabajando en el nivel mas bajo, esto puede ser un paseo en SoftIce territorio, no hay manera en la tierra que se le puede dar un paso a traves de su codigo entre un Bloqueo..desbloquear par. Un camino de ronda que esto es el uso de un volcado de procedimiento para concatenar cadenas de parametros a un archivo de registro, o una ventana de depuracion como en Gexperts.
Si usted sabe C o C de curso de Microsoft proporcionar un servicio de DirectDraw SDK con muchos ejemplos y, probablemente, el mas informativo de archivo de ayuda que he visto nunca. Recomiendo la 'Dentro de DirectX' libro de Microsoft press para todos en la informacion de fondo acerca de DirectX. Microsoft Press ISBN: 1572316969. Una alternativa libro es Windows Programacion de juegos para Dummies por Andre Lamothe editorial IDG Books Worldwide Inc. ISBN: 0764503375, pero de nuevo esto es C/C base.
Delphix
Haber aprendido como hacer simple DirectDraw cosas en Delphi ahora tiene una opcion - a desarrollar sus propios componentes o el uso de los definidos para usted - como DelphiX. No tengo ninguna relacion con el autor, excepto admiracion por un excelente trabajo y su generosidad al dar a la basura. Si usted es nuevo a DelphiX, puede ser un poco abrumador, y le sugiero que imprima las muestras y demostraciones y estudio en detalle. Aqui esta mi resumen sobre el uso de ellos.
Una TdxForm es una forma modificada que debe ser utilizado como el antepasado forma, no TForm - ¿algun mensaje de control, incluyendo el manejo de excepciones y la conmutacion de la superficie principal de GDI, asi que usted puede ver los mensajes. Un DxDraw componente es caer en ella y establecer las propiedades para la resolucion y profundidad de color. Esto ha controladores de eventos para lidiar con la inicializacion y terminacion del objeto. Estos controladores son que su aplicacion se debe hacer la carga de imagenes y preparacion para el bucle de juego.
El bucle principal del juego es en realidad un temporizador impulsado controlador de eventos. El temporizador se mantiene un seguimiento de cualquier lag, asi que usted puede ver si el codigo esta tomando demasiado tiempo para ejecutar.
Hay imagen y imagelist componentes que permiten configurar imagenes de mapa de bits en tiempo de diseño y se puede especificar en que tipo de memoria ram (sistema de PC o de Video) las imagenes se colocan.
& nbsp Un RestoreSurface controlador proporcionado por lo que su aplicacion puede cargar imagenes despues de que el usuario Alt-Tab y pierde el contenido de la memoria ram de video.
El TDirectDrawSurface clase implementa casi toda la superficie de DirectX funcionalidad. Las superficies se pueden crear en cualquier lugar, de cualquier tamaño y las imagenes blitted rapidamente con la opcion de la escala y la rotacion entre las superficies. La mayoria de las tarjetas de video tienen un hardware de blitter y DirectDraw va a utilizar esto. Imagenes rara vez son rectangulares, pero siempre se definen en un bloque rectangular. Un mapa de la rutina de dibujo dibuja 150 hexagonos en menos de 4 ms es decir, cada uno tiene alrededor de 26 microsegundos.
la Creacion de un nuevo bufer se realiza automaticamente si el Dxdraw.Doflip opcion es verdad. Tenga en cuenta que la salida va a la parte de atras de bufer en ese caso, y no ver nada hasta dxdraw.flip se llama. Si el doflip opcion es falsa, como en el que se ejecuta en una ventana de salida que va directo y no necesita llamar a dxdraw.flip (a pesar de que no hace daño).
El Codigo de Radar.Exe.
En 370 lineas de codigo, he escrito una pequeña simulacion de las aeronaves que vuelan en direcciones al azar - esto es muy simple funcionalidad, asi que no esperes la deteccion de colisiones y explosiones!. Son las teclas ESC para salir, 'a' para agregar un avion y Alt-1, 2 o 3 para cambiar a mayores resoluciones de pantalla de 640 por 480, 800 x 600 y 1024 x 768.
La aeronave en tres colores diferentes volar de forma aleatoria a traves de la pantalla ligeramente diferentes velocidades y rumbos y algunos de flash. Hay 25 a empezar, pero mantenga pulsada la tecla y el numero seguira en aumento rapidamente. La aeronave se muestran como rectangulos que rodea la pantalla de coordenadas, y este texto es la salida de la Gdi TextOut rutina de esto ralentiza las cosas un poco. Para ver el efecto de esto, intente con 100 aviones, a continuacion, comentar estas lineas abajo en el metodo tPlane.MovenDraw y vuelva a ejecutar. Todo lo que se muestra es la que encierra marco. Este es dibujado por un poco de montaje codigo estaba mostrando!
si fflashcount >=0,
& nbsp & nbsp & nbsp & nbsp con fdxdraw.De la superficie.Lienzo de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp pincel.color := fcolor
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp str := inttostr(fx) inttostr(fy)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp textout(fx,fy,str)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp liberacion
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
Observe que el uso de la liberacion en este trozo de codigo. Este es un metodo de TDirectDrawSurface y libera el identificador de la base del Contexto de presentacion. En cualquier momento que usted utilice una llamada Gdi debe llamar a la liberacion.
ahora, Usted puede tener un monton mas de aeronaves (bueno marcos rectangulares) sin problemas zumbando alrededor de la pantalla. Vale la pena probarlo con el volteo de activado y desactivado a ver que diferencia si la hubiera, que hace.
Como funciona.
gran parte de el burro de trabajo se realiza mediante la configuracion de las propiedades de la DXDraw componente.- por ejemplo la resolucion de la Pantalla, pantalla completa o en ventana, doFlip, etc, etc.
yo uso un tstringlist para cada aeronave objeto. Estos son creados con el azar de las coordenadas y las direcciones de movimiento. En el temporizador del controlador, todos los aviones se mueven cada marco por el azar x e y especificadas las compensaciones, rebotando en los bordes de la pantalla. La pantalla se borra y todas las aeronaves a dibujar cada vez.
El texto en la parte superior izquierda muestra como muchas de las aeronaves estan en la pantalla y el gal. Normal lag valor es 1. Todo esta de salida en un marco. Si esto llega a 2 o mas (lean sobre la tecla), el movimiento de los aviones se vuelve desigual, ya que se esta tomando mas tiempo de un marco periodo de dibujar. Trate de evitar esto!
no Manuar metodo dibuja el marco de los rectangulos en blanco y es muy rapido. Tanto en este como en los no usados metodo Drawrect son buenos ejemplos de acceso directo de ram de video a traves de la Cerradura..Desbloquear y tanto las rutinas como el uso de la cancha de los miembros de la Superficie Descriptor (dds) para desplazarse hacia abajo a partir de un pixel de la linea a la siguiente.
Notas para Delphi 4.0 y NT 4.0, los Usuarios
Hay dos versiones de DelphiX disponibles y ambos se trabajo con Delphi 3.0, el anterior tiene un pequeño archivo Zip (606Kb). La segunda (841Kb) tiene algunas Delphi 4.0 codigo especifico (la sobrecarga y los parametros por defecto) y compatible con DirectX 6, pero los programas construida con ella, NO va a correr en Win NT 4.0 en lugar obtendra el error 'Interfaz no compatible'. El uso de la version anterior en ese caso.
& & & & & & & & & & -
El archivo zip que incluye tiene archivos de codigo fuente, pero no el codigo DirectX. Este puede ser descargado desde http://www.yks.ne.jp/'hori/DelphiX-e.html o en varios otros lugares.
El archivo de este articulo puede ser descargado aqui ddraw.ZIP


El uso de directdraw con delphi

El uso de directdraw con delphi : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación