麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

用DELPHI開發(fā)DirectX游戲

2019-11-18 18:30:05
字體:
來源:轉載
供稿:網(wǎng)友
這不是一篇關于DirectX的祥細教程,而是講解如何用DELPHI開發(fā)DirectX游戲.因為不管是網(wǎng)上或是書店,關于DirectX的書基本上是用C++或VC描述的.用DELPHI開發(fā)游戲的資料是少之又少,這篇文章的目的就是讓讀者能夠?qū)W會如何利用已有的資料學習來開發(fā)游戲.
  這篇文章面向的是對DirectX有一定了解,卻不知道如何在DELPHI下開發(fā)DirectX游戲的讀者.

推薦參考資料:
<<游戲編程指南>>,<<DirectX中文收冊>>

DELPHI能不能開發(fā)游戲?
  回答是當然,網(wǎng)上很多游戲論壇有不少人都認為開發(fā)游戲只能用C++或VC. DELPHI只適合來做做桌面應用,勸有這些觀點的人先反匯編看看DELPHI和VC編釋出來的代碼,或是看看"奇跡時代"這個游戲,"奇跡時代"就是用DELPHI開發(fā)的,速度和畫面優(yōu)于帝國時代.DELPHI是完全面向?qū)ο?并能內(nèi)嵌匯編,支持MMX指今(DELPHI中MMX寄存器為mm0-mm7).完全適合游戲開發(fā)的需要.其實不論VC,DELPHI都只是工具,只要內(nèi)功好都能做出來好的程序或是游戲.

準備工作:
   目前用DELPHI開發(fā)DirectX游戲有二種選擇.一是使用jedi的DirectX聲明(http://www.delphi-jedi.org).另一種是使用DelphiX控件.在這里我們準備使用jedi的DirectX聲明包來開發(fā)DirectX游戲,之所以選擇DirectX聲明包是因為這樣是以SDK方式來開發(fā)游戲,以后如果需要轉到其它語言也不必重新學習DirectX.至于DelphiX控件我沒用過,沒發(fā)言權,不過偶是不用日貨的 ;-)
  先到以下地址下載DirectX的聲明包(http://kuga.51.net/download/files/directx7.rar),并解壓到你自定的目錄中.再在DELPHI中選擇Tools->Environment Options,在打開的窗口中選擇Library選項卡,點擊Library Path后面的按鈕.會彈出來一個Directories窗口,再點擊Greyed items denote invalid path右邊的按鈕.選擇DirectX聲明解壓到的目錄.再點擊ADD按鈕,這樣就把DirectX聲明所在的目錄添加到了DELPHI 的Library路徑中.就可以直接在uses中引用DirectX聲明中的單元了.這個聲明包里自帶了幾個例子,可以作為入門的參考.

調(diào)試經(jīng)驗:
  開發(fā)全屏游戲時最好把設計時的屏幕分辯率設為和游戲一樣的分辯率,以免調(diào)試時頻繁切換分辯率而損傷屏幕.
  開發(fā)全屏游戲最好是在WIN2000/XP下,不然在98下調(diào)試時游戲進入死循環(huán)或產(chǎn)生異常時.機子很容易就會當?shù)?在2000/XP下全屏游戲進入死循環(huán)時可以按ALT+TAB切換到DELPHI中(但這時由于DirectX游戲是全屏,獨占了屏幕,屏幕上不會有變化,所以要多試幾次),按CTRL+F2就可以結束游戲.如果是異常的話,切換到DELPHI中先按下回車再按CTRL+F2就可以結束調(diào)試游戲了.

注意:
  如果你是使用DELPHI7的話,請把DirectDraw.pas中的145行{$IFDEF VER140}改為{$IFDEF VER150}才能正常編釋.
  最好使用API的方式來建立游戲主窗口而不是使用VCL的TFORM類.

先讓我們來看看用C++和DELPHI初始化DirectDraw對像的代碼段.
c++版:
BOOL InitDDraw( )
{
  LPDIRECTDRAW7 lpDD; // DirectDraw對象的指針
  if ( DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
    return FALSE;    {創(chuàng)建DirectDraw對象}
  {里使用了 if ( xxx != DD_OK) 的方法進行錯誤檢測,這是最常用的方法}
  if (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
    return FALSE;   {設置DirectDraw控制級}
  if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE ) != DD_OK )
    return FALSE;    {置顯示模式}
}

DELPHI版:
function TForm1.InitDirectDraw: Boolean;
var
  lpDD: IDirectDraw7;
begin
  Result := False; {先假設初始化失敗}
  {建立DirectDraw對象}
  if DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK then
    exit;
  {設定DirectDraw的控制級,第一個參數(shù)為DirectDraw窗口的句柄,這里把控級級設為的全屏加獨占模式}
  if lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN) <> DD_OK then
    exit;
  {設定顯示模式,第一,二個參數(shù)為分辯率大小,第三個參數(shù)用來設置顯示模式的顏色位數(shù),
  第四個參數(shù)設定屏幕的刷新率,0為默認值,第四個參數(shù)唯一有效的值只有DDSDM_STANDARDVGAMODE}
  if lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK then
    exit;
  Result := True;
end;

可以看出來,這二段代碼除了語法和對象名外完全一樣,只要了解了這點,我們完全可以參考VC或C++的資料,然后用DELPHI做出自己的游戲了.DELPHI中DirectX聲明中的對象名,結構名和VC不一樣,一般的對應關系如下:
                                     DELPHI                             VC
DirectDraw對象       IDirectDraw7                        LPDIRECTDRAW7
頁面對象             IDirectDrawSurface7             LPDIRECTDRAWSURFACE7
DirectDraw的頁面描述 TDDSurfaceDesc2                 DDSURFACEDESC2
基本上只是前綴不一樣,由于篇幅,這兒就不一一列出所有對像和結構了.



上一篇:Delphi與匯編雜談(2)

下一篇:在Delphi中實現(xiàn)圖片的旋轉、縮放

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關注

主站蜘蛛池模板: 国产一级二级在线播放 | 精品国产观看 | 91麻豆蜜桃一区二区三区 | 国产在线免费 | 操穴视频| 伊人在线 | 亚洲第一页综合 | 久久精品九九 | 毛片在线免费播放 | 日韩黄色一级视频 | 亚洲人成中文字幕在线观看 | 日韩黄色免费电影 | 国产69精品99久久久久久宅男 | 久夜草 | 黄色一级片免费在线观看 | 国产一级淫片在线观看 | 亚洲片在线观看 | 久久久久久高清 | 亚洲日韩中文字幕一区 | 欧美aaaaa一级毛片在线 | 亚洲精中文字幕二区三区 | a视频在线播放 | 亚洲欧美在线视频免费 | 黄色网址免费进入 | 中国杭州少妇xxxx做受 | 久久久久se | 国产流白浆高潮在线观看 | 伊人久久国产精品 | 一级外国毛片 | 色婷婷久久久亚洲一区二区三区 | 国产91在线免费 | 久久久久久久久久久综合 | 国产成年人视频网站 | 欧美a视频在线观看 | 成人午夜精品久久久久久久3d | 日本不卡一区二区在线观看 | 中文字幕精品久久 | 日韩高清影视 | 黄色片免费在线播放 | 一级片九九 | 黄色网址在线免费 |