用DirectX做2D遊戲的三種方法

2021-05-23 03:13:44 字數 2518 閱讀 4725

1directdraw

這是早期的做法,由於現在的

directdraw

已經併入到

directgraphic

當中,而且微軟也已經在

direct sdk8

中把directdraw

部分的文件取消了,現在多用

d3d來做

2d的遊戲

2id3dxsprite

這個介面可以很好的製作

2d動畫,

id3dxsprite

是driectx 9.0

裡面的乙個簡單模組,在

driectx 9.0

幫助文件裡面對其功能的描術為:

「向使用者提供一套簡單的在螢幕上實現精靈渲染的介面。

」何為精靈渲染,說白了就是渲染2d畫面,

id3dxsprite

幫助使用者通過簡單的操作就能運用

driectx 9.0

製作2d遊戲(渲染2d圖形)。對於繪製

2d,其主要步驟就是

(1)讀取,載入紋理

(2)如果需要對做旋轉或者縮放的話,設定相應的矩陣

(3)id3dxsprite::draw(….)

具體參考**如下:

//初始化精靈對像

d3dxcreatesprite(g_pdevice, &g_psprite);

g_pdevice->beginscene();

g_pdevice->clear(0,null,d3dclear_target|d3dclear_zbuffer|d3dclear_stencil,

d3dcolor_xrgb(0,0,0),1.0f,0l);

g_psprite->begin(d3dxsprite_alphablend);

//得到2d座標轉換矩陣

d3dxmatrixtransformation2d(&mat, null, 0.0f, &d3dxvector2(0.1f, 0.1f),

&d3dxvector2(50.0f, 50.0f), 0.5f, &d3dxvector2(100.0f, 100.0f));

g_psprite->settransform(&mat);

//渲染精靈

g_psprite->draw(g_ptexsprite, null, null, null, 0x99ffffff);

g_psprite->end();

g_pdevice->endscene();

g_pdevice->present(null, null, null, null);

另:id3dxsprite::draw ()

方法9.0c

以上版本為

5個引數.,

9.0b

版本為7

個引數。

3設定頂點格式為d3dfvf_ xyzrhw

direct3d

提供了一種座標格式

d3dfvf_xyzrhw

,用於變換後的座標空間。它有

4個分量x、

y、z、

rhw,其中x、

y使用視窗座標,z、

rhw代表深度。只要把z、

rhw設定成常數(通常z取

0,rhw取

1),就可以用它來定義二維圖形的頂點。在使用這種座標格式繪製二維圖形時,建議用頂點顏色或紋理進行渲染,不要使用光照和材質,而且要禁用

z快取,此時後繪製的圖形將覆蓋在最上面。

下面來演示如何顯示乙個二維的紅色三角形

,使用頂點顏色渲染,圖元格式選三角形列

//紅色三角形的

fvf格式:

rhw座標、頂點顏色

struct customvertex3

;#define d3dfvf_customvertex3 (d3dfvf_xyzrhw | d3dfvf_diffuse)

lpdirect3dvertexbuffer9 m_pvb3;//

紅色三角形的頂點快取區介面指標

//建立紅色三角形

customvertex3 vertices3[3] = //

頂點為紅色

, ,

};

//建立紅色三角形的頂點快取區,填入頂點資料(博文長度有限制,此處**略)

.....

//渲染

紅色三角形

m_pdevice->setfvf( d3dfvf_customvertex3 );

m_pdevice->setstreamsource( 0, m_pvb3, 0, sizeof(customvertex3) );

m_pdevice->drawprimitive( d3dpt_********list, 0, 1 );

.....

2D遊戲開發(2)

每次給遊戲新增新功能時,通常也會引入一些新設定。為了讓所有的設定進行統一管理,我們可以配置乙個名為 setting的模組,這個模組中包含乙個setting的類,用來儲存所有的設定。usr bin env python3.5 filename setting 儲存所有的設定 class setting...

2D遊戲vs3D遊戲

前幾天,小李子一直在糾纏3d,偽3d遊戲等。雖說小李子效力於大公司,但是該公司畢竟不是專業的遊戲公司。美工xx等一概不全,要使用個3d引擎做個ipad,android的遊戲。這年頭是怎麼了。遊戲最主要的是什麼?是畫面?還是互動的畫面?還是互動的立體畫面?接觸過這麼多遊戲,還沒有見過只以最精緻的畫面獲...

2D遊戲vs3D遊戲

前幾天,小李子一直在糾纏3d,偽3d遊戲等。雖說小李子效力於大公司,但是該公司畢竟不是專業的遊戲公司。美工xx等一概不全,要使用個3d引擎做個ipad,android的遊戲。這年頭是怎麼了。遊戲最主要的是什麼?是畫面?還是互動的畫面?還是互動的立體畫面?接觸過這麼多遊戲,還沒有見過只以最精緻的畫面獲...