Este não é um tutorial detalhado sobre DirectX, mas uma explicação de como usar DELPHI para desenvolver jogos DirectX. Porque os livros sobre DirectX, sejam online ou em livrarias, basicamente os descrevem em C++ ou VC. Muito pouco, o objetivo deste artigo é permitir que os leitores aprendam como utilizar as informações existentes para aprender e desenvolver jogos.
Este artigo é destinado a leitores que possuem um certo conhecimento de DirectX, mas não sabem como desenvolver jogos DirectX em DELPHI.
Materiais de referência recomendados:
<<Guia de programação de jogos>>,<<Coleção chinesa DirectX>>
A DELPHI pode desenvolver jogos?
A resposta é, claro, muitas pessoas em muitos fóruns de jogos online acreditam que apenas C++ ou VC podem ser usados para desenvolver jogos. DELPHI é adequado apenas para aplicativos de desktop. Pessoas com essas visões são aconselhadas a desmontar e olhar o código compilado por DELPHI e VC, ou dar uma olhada no jogo "Age of Miracles" desenvolvido com DELPHI. e os gráficos são melhores que o Age of Empires.DELP HI é totalmente orientado a objetos, pode incorporar montagem e suporta instruções MMX (os registros MMX no DELPHI são mm0-mm7. Na verdade, independentemente do VC, o DELPHI é apenas uma ferramenta, contanto que você tenha boas habilidades internas, você pode torná-lo um bom programa ou jogo.
Preparação:
Atualmente existem duas opções para desenvolver jogos DirectX com DELPHI. Uma é usar a declaração DirectX do jedi (http://www.delphi-jedi.org). A outra é usar os controles DelphiX. O pacote de declaração X é usado para desenvolver jogos DirectX. A razão pela qual escolhi o pacote de declaração DirectX é porque ele usa o método SDK para desenvolver jogos. Se eu precisar mudar para outras linguagens no futuro, não será necessário. reaprender DirectX. Quanto ao controle DelphiX, nunca usei e não tenho nada a dizer. Mas não uso produtos japoneses;-)
Primeiro vá para o seguinte endereço para baixar o pacote de declaração DirectX (http://kuga.51.net/download/files/directx7.rar) e extraia-o para seu diretório personalizado. Em seguida, selecione Ferramentas-> Opções de ambiente no DELPHI, Selecione a guia Biblioteca na janela aberta e clique no botão atrás do Caminho da Biblioteca. Uma janela de Diretórios aparecerá e clique em Itens acinzentados indicados como inválidos. botão no lado direito do caminho. Selecione o diretório para o qual a declaração DirectX é extraída. Em seguida, clique no botão ADICIONAR para adicionar o diretório onde a declaração DirectX está ao caminho da biblioteca do DELPHI. in usa. Esta declaração O pacote vem com vários exemplos que podem ser usados como referência para começar.
Experiência de depuração:
Ao desenvolver um jogo em tela cheia, é melhor definir a resolução da tela durante o design para a mesma resolução do jogo para evitar danificar a tela ao alternar frequentemente as resoluções durante a depuração.
É melhor desenvolver jogos em tela cheia no WIN2000/XP, caso contrário, ao depurar em 98, o jogo entrará em um loop infinito ou ocorrerá uma exceção. abaixo de 2000/XP, você pode pressionar ALT+ TAB para DELPHI (mas neste momento Como os jogos DirectX são em tela cheia e ocupam a tela, não haverá alterações na tela, então você precisa tentar mais algumas vezes). Pressione CTRL+F2 para encerrar o jogo. pressione Enter primeiro e depois pressione CTRL + F2 para encerrar o jogo de depuração.
Perceber:
Se você estiver usando DELPHI7, altere a linha 145 {$IFDEF VER140} em DirectDraw.pas para {$IFDEF VER150} para compilação e interpretação normais.
É melhor usar API para criar a janela principal do jogo em vez de usar a classe TFORM da VCL.
Primeiro, vamos dar uma olhada no trecho de código que inicializa um objeto DirectDraw usando C++ e DELPHI.
versão c++:
BOOL InitDDraw()
{
LPDIRECTDRAW7 lpDD; //Ponteiro para objeto DirectDraw
if (DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
retornar FALSO; {Criar objeto DirectDraw}
{O método if (xxx! = DD_OK) é usado para detecção de erros, que é o método mais comumente usado}
if (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
return FALSE; {Definir nível de controle do DirectDraw}
if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
return FALSE; {definir modo de exibição}
}
Versão DELPHI:
função TForm1.InitDirectDraw: Boolean;
var
lpDD: IDirectDraw7;
começar
Resultado: = Falso; {Assumir falha na inicialização}
{Criar objeto DirectDraw}
se DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK então
saída;
{Defina o nível de controle do DirectDraw. O primeiro parâmetro é o identificador da janela do DirectDraw. Aqui, o nível de controle é definido para tela inteira mais modo exclusivo}.
se lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE ou DDSCL_FULLSCREEN) <> DD_OK então
saída;
{Defina o modo de exibição. O primeiro e o segundo parâmetros são a resolução. O terceiro parâmetro é usado para definir o número de dígitos coloridos no modo de exibição.
O quarto parâmetro define a taxa de atualização da tela. 0 é o valor padrão. O único valor válido do quarto parâmetro é DDSDM_STANDARDVGAMODE}.
se lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK então
saída;
Resultado := Verdadeiro;
fim;
Pode-se ver que esses dois trechos de código são exatamente iguais, exceto pela sintaxe e pelos nomes dos objetos. Contanto que entendamos isso, podemos consultar as informações de VC ou C++ e então usar DELPHI para criar nossos próprios objetos. Declaração DirectX em DELPHI O nome, o nome da estrutura e o VC são diferentes. A correspondência geral é a seguinte:
DELPHI VC
Objeto DirectDrawIDirectDraw7 LPDIRECTDRAW7
Objeto de página IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
Descrição da página DirectDraw TDDSurfaceDesc2 DDSURFACEDESC2
Basicamente, apenas os prefixos são diferentes. Devido ao espaço, nem todos os objetos e estruturas estão listados aqui.