Este no es un tutorial detallado sobre DirectX, sino una explicación de cómo usar DELPHI para desarrollar juegos DirectX. Porque los libros sobre DirectX, ya sea en línea o en librerías, básicamente los describen en C++ o VC. Muy poco, el propósito de este artículo es permitir a los lectores aprender a utilizar la información existente para aprender y desarrollar juegos.
Este artículo está dirigido a lectores que tienen cierto conocimiento de DirectX pero no saben cómo desarrollar juegos DirectX en DELPHI.
Materiales de referencia recomendados:
<<Guía de programación de juegos>>,<<Colección china de DirectX>>
¿Puede DELPHI desarrollar juegos?
La respuesta es, por supuesto, que muchas personas en muchos foros de juegos en línea creen que solo se pueden utilizar C ++ o VC para desarrollar juegos. DELPHI solo es adecuado para aplicaciones de escritorio. Se recomienda a las personas con estos puntos de vista que lo desarme y mire el código compilado por DELPHI y VC, o que mire el juego "Age of Miracles" desarrollado con DELPHI. y los gráficos son mejores que Age of Empires.DELP HI está completamente orientado a objetos, puede integrar ensamblaje y admite instrucciones MMX (los registros MMX en DELPHI son mm0-mm7. Es completamente adecuado para las necesidades del desarrollo de juegos. De hecho, independientemente de VC, DELPHI es solo una herramienta). Siempre que tengas buenas habilidades internas, puedes convertirlo en un buen programa o juego.
Preparación:
Actualmente hay dos opciones para desarrollar juegos DirectX con DELPHI. Una es usar la declaración DirectX de jedi (http://www.delphi-jedi.org). La otra es usar controles de DelphiX. El paquete de declaración X se utiliza para desarrollar juegos DirectX. La razón por la que elijo el paquete de declaración DirectX es porque utiliza el método SDK para desarrollar juegos. Si necesito cambiar a otros idiomas en el futuro, no es necesario. volver a aprender DirectX En cuanto al control DelphiX, nunca lo he usado y no tengo nada que decir. Pero no uso productos japoneses ;-)
Primero vaya a la siguiente dirección para descargar el paquete de declaración de DirectX (http://kuga.51.net/download/files/directx7.rar) y extráigalo a su directorio personalizado. Luego seleccione Herramientas->Opciones de entorno en DELPHI. Seleccione la pestaña Biblioteca en la ventana abierta y haga clic en el botón detrás de Ruta de la biblioteca. Aparecerá una ventana de Directorios, luego haga clic en Elementos atenuados que se indican como no válidos. en el lado derecho de la ruta Seleccione el directorio al que se extrae la declaración de DirectX. Luego haga clic en el botón AGREGAR para agregar el directorio donde está la declaración de DirectX a la ruta de la biblioteca de DELPHI. Puede hacer referencia directamente a la unidad en la declaración de DirectX. en usos. Esta declaración El paquete viene con varios ejemplos que pueden usarse como referencia para comenzar.
Experiencia de depuración:
Al desarrollar un juego de pantalla completa, es mejor configurar la resolución de la pantalla durante el diseño en la misma resolución que el juego para evitar dañar la pantalla al cambiar frecuentemente de resolución durante la depuración.
Es mejor desarrollar juegos de pantalla completa en WIN2000/XP. De lo contrario, al depurar en 98, el juego entrará en un bucle infinito o se producirá una excepción y la máquina se bloqueará fácilmente. En 2000/XP, puede presionar ALT+ TAB para cambiar a DELPHI (pero en este momento Dado que los juegos DirectX son de pantalla completa y ocupan la pantalla, no habrá cambios en la pantalla, por lo que deberás intentarlo unas cuantas veces más. Presiona CTRL+F2 para finalizar el juego. Si es anormal, cambia a DELPHI y. presione Enter primero y luego presione CTRL+F2 para finalizar el juego de depuración.
Aviso:
Si está utilizando DELPHI7, cambie la línea 145 {$IFDEF VER140} en DirectDraw.pas a {$IFDEF VER150} para una compilación e interpretación normales.
Es mejor usar la API para crear la ventana principal del juego en lugar de usar la clase TFORM de VCL.
Primero, echemos un vistazo al fragmento de código que inicializa un objeto DirectDraw usando C++ y DELPHI.
versión c++:
BOOL InitDDraw( )
{
LPDIRECTDRAW7 lpDD; //Puntero al objeto DirectDraw
si (DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL)!= DD_OK)
devolver FALSO; {Crear objeto DirectDraw}
{El método if (xxx != DD_OK) se utiliza para la detección de errores, que es el método más utilizado}
si (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)!= DD_OK)
devolver FALSO; {Establecer nivel de control de DirectDraw}
si ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
devolver FALSO; {establecer modo de visualización}
}
Versión DELPHI:
función TForm1.InitDirectDraw: booleana;
var
lpDD: IDirectDraw7;
comenzar
Resultado: = Falso; {Asumir que la inicialización falló}
{Crear objeto DirectDraw}
si DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK entonces
salida;
{Establecer el nivel de control de DirectDraw. El primer parámetro es el identificador de la ventana de DirectDraw. Aquí, el nivel de control se establece en pantalla completa más modo exclusivo.
si lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE o DDSCL_FULLSCREEN) <> DD_OK entonces
salida;
{Establezca el modo de visualización. El primer y segundo parámetro son la resolución. El tercer parámetro se utiliza para configurar el número de dígitos de color en el modo de visualización.
El cuarto parámetro establece la frecuencia de actualización de la pantalla. 0 es el valor predeterminado. El único valor válido del cuarto parámetro es DDSDM_STANDARDVGAMODE}
si lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK entonces
salida;
Resultado := Verdadero;
fin;
Se puede ver que estos dos fragmentos de código son exactamente iguales excepto por la sintaxis y los nombres de los objetos. Siempre que entendamos esto, podemos consultar la información de VC o C++ y luego usar DELPHI para crear nuestros propios objetos. Declaración de DirectX en DELPHI El nombre, el nombre de la estructura y VC son diferentes. La correspondencia general es la siguiente:
DELPHI VC
Objeto DirectDrawIDirectDraw7 LPDIRECTDRAW7
Objeto de página IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
Descripción de la página DirectDraw TDDSurfaceDesc2 DDSURFACEDESC2
Básicamente, sólo los prefijos son diferentes. Debido al espacio, no se enumeran aquí todos los objetos y estructuras.