freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

臺(tái)球游戲計(jì)算機(jī)(編輯修改稿)

2025-01-11 02:35 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 精靈的狀態(tài),包括人物角色狀態(tài)的變化和板狀態(tài)位置的變化。 關(guān)于物體位置與狀態(tài)的變化是由現(xiàn)在的狀態(tài)和 KeyDown鍵值來實(shí)現(xiàn)的。 角色的變化控制函數(shù) UpdateSprites()包括 1. MoveAllUP()把所有的 Sprite上移 2. MovePlayerUpDown()來確定玩家是否懸空下落或者是碰彈板上移 3. MoveLeftOrRight()來根據(jù)外部按鍵狀態(tài)左右移動(dòng)玩家角色,如果按左鍵, MoveLeft狀態(tài)為 1,那么 Player1就向左移動(dòng)若干單位;如果右就為 1,右移若干單位;同樣如果沒有按鍵就為 0,表示不移動(dòng) 4. CheckIfInAire()函數(shù)來檢測(cè)是否懸空,它通過索引來逐一檢索精靈串,取得現(xiàn)在的位置信息,看看它們的區(qū)域是否重合,如果有的話就表明Player站在板上,否則就在使 Player下落,并顯示下一個(gè)角色圖。 5. ChangeSprites()決定場(chǎng)景中所有精靈的變化,這種改變是按照預(yù)定義 11 圖 12 windows 程序結(jié)構(gòu) 的規(guī)則進(jìn)行的。 最后一步操作是 DisplayFrame(),把所有的角色與場(chǎng)景顯示到屏幕上,在顯示的時(shí)候,不同角色優(yōu)先級(jí)不同,先用冒泡排序法將它們的位置排序后,使最后面的 Sprite 圖就先顯示出來,而最前面的圖就后顯示出來。最后就可以得到流暢的游戲畫面了。 程序結(jié)構(gòu)如圖 12: 任何一個(gè) Windows 程序都有這種結(jié)構(gòu)。但是作為一個(gè)游戲,必須要有一個(gè)游戲循環(huán),使游戲能夠不停的執(zhí)行下去,從 PeekMessage()到 DispathcMessage()都在While(TRUE)循環(huán)當(dāng)中,如果沒有外部消息時(shí),就進(jìn)行GameLoop 處理下一幀信息。具體的 DirectDraw 使用方式如下 [2] [3]: ⑴ DirectDrawCreate(NULL,amp。pDD,NULL)得到一個(gè)全局的 DirectDraw 對(duì)象指針; ⑵ pDDQueryInterface(IID_IdirectDraw7,(LPVOID*)amp。pDD2)。得到一個(gè)將要使用的 DirectDraw7 對(duì)象指針; ⑶ 用 SetCooperativeLevel(GetSafeHwnd(),DDSCL_EXCLUSIVE| DDSCL_FULLSCREEN| DDSCL_ALLOWMODEX)函數(shù)設(shè)置程序的協(xié)作級(jí) 12 別。般的來說 ,最常用的有 WINDOWS 和 FULLSCREEN 兩種, FULLSCREEN 模式是一種獨(dú)占模式,即不與其他的應(yīng)用程序共享內(nèi)存。為了提高游戲的性能 ,一般的游戲當(dāng)規(guī)模達(dá)到一定的程序的時(shí)候,都傾向于使用 FULLSCREEN 模式使游戲的畫面更加流暢; ⑷ pDD2SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBPP, DWORD dwRefreshRate,DWORD dwFlags)來設(shè)置顯示模式; ⑸ 建立 Surface。先填充 DDSURFACEDESC2 結(jié)構(gòu) ,然后調(diào)用 pDD2 CreateSurface(amp。Desc,amp。pPri,NULL)); ⑹ 利用 LoadImage()函數(shù)載入將要使用的位圖; ⑺ CreateCompatibleDC()來創(chuàng)建與系統(tǒng)兼容的設(shè)備 DC.; ⑻ BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop)來進(jìn)行位塊傳輸; ⑼ pDD2SetColorKey(DDCKEY_SRCBLT,amp。ColorKey)來設(shè)置 ColorKey; 在 Leapman當(dāng)中,的主要 技術(shù)就在于 ColorKey和 Blt,其他功能的的實(shí)現(xiàn)都是通過 Csurface 類和 Cdisplay類來封裝。 使用的時(shí)候使用函數(shù) g_pDisplayCreateSurfaceFromBitmap( amp。g_pBackSurface, MAKEINTRESOURCE( IDB_BMP_BACK ),SCREEN_WIDTH, SCREEN_HEIGHT ) ) )來建立一個(gè)有目標(biāo)位圖的 Surface 對(duì)象。 當(dāng)所有的 Sprites 都在內(nèi) 存 Surface 上繪制完畢,調(diào)用 g_pDisplay()將這些畫面輸出到顯示屏上。 四、 Direct3D 技術(shù)及應(yīng)用 13 在 Pool’s Up 游戲中,所用到的模型有房屋、球桌、球桿與臺(tái)球。由于球桿與臺(tái)球的 Mesh 比較簡(jiǎn)單,程序中用填充自定義頂點(diǎn)方式建立。先定義了一個(gè)LPDIRECT3DVERTEXBUFFER8 類型變量 m_pVertexBuffer,然后通過向頂點(diǎn)緩沖區(qū)內(nèi)填充點(diǎn)信息(包括材質(zhì)信息與頂點(diǎn)位置),這樣建立的模型不會(huì)有冗余信息,執(zhí)行效率非常高。房屋與球桌相對(duì)來說比較復(fù)雜,所以先在 3DSMax中建立好模型,導(dǎo)出為 .3DS 文件,利用 開發(fā)包中的 把模型轉(zhuǎn)換為 .X格式,這種格式 DirectX 可以直接支持。 在這個(gè)三維游戲 pool’s Up 當(dāng)中,關(guān)鍵問題就是在于球的碰撞控制。碰撞包括球與球的碰撞、球與球臺(tái)的碰撞??偟膩碚f碰撞就是預(yù)測(cè)未來幀— N 物體是否發(fā)生接觸,如果物體發(fā)生了接觸則在第 N1 幀做出反射動(dòng)作。否則運(yùn)動(dòng)物體間會(huì)發(fā)生明顯嵌入或粘連現(xiàn)象。 判斷球與球之間是否發(fā)生碰撞非常簡(jiǎn)單,只要檢測(cè)空間兩點(diǎn)的距離是否小與球的直徑便可。而球之 間的碰撞反應(yīng)如圖13:假設(shè)兩球是完全彈性碰撞,向量 t 為兩球心間的連線, n 是垂直于 MO 的向量。則v1在 t上的分量 v1t與 v2在 t上的分量 v2t 動(dòng)量守恒,由于兩球質(zhì)量相同 ~聯(lián)立動(dòng)能守恒公式可得:碰撞后兩球的速度在 t 上的分量被交換。而在 n 方向上 v1n,v2n 將保持不變。最后把 v1t、 v1n、 , v2t、 v2n 分別沿 x 軸 y 軸投影對(duì)應(yīng)合成后即可得到兩球圖 8. 1 圖 14 臺(tái)球模型 圖 13 碰撞示意圖 14 圖 18 檢測(cè)碰撞回退 a 圖 19 檢測(cè)碰撞回退 b 碰撞后的速度。 球與球臺(tái)的碰撞實(shí)作起來相對(duì)復(fù)雜,因?yàn)榍蚺_(tái)是一個(gè)網(wǎng)格模型,頂點(diǎn)數(shù)目較多而且形狀不規(guī)則,所以只有另想辦法。如圖 14,假想 o 是桌面上的一個(gè)球,沿圓心作 4 個(gè)向量把圓平均分為 4 份。每當(dāng)球移動(dòng)后就判斷這些個(gè)向量是否有和桌面相交。如果有則進(jìn)行碰撞反應(yīng)處理,否則速度方向不變??紤]到球臺(tái)幾何形狀的特殊性,在圖 15 情況下球與球臺(tái)的碰撞會(huì)發(fā)生異常。 若干時(shí)間后球 o運(yùn)動(dòng)到如圖 16 的位置。 顯然,球 o 與球臺(tái)發(fā)生了碰撞,但是由于向量 a,b,c,d 的方向問題,此時(shí)無法判斷球與球臺(tái)的碰撞。球?qū)⑦M(jìn)入球臺(tái)內(nèi)部,造成失真。很顯然增加方向向量的數(shù)量可以很好地解決這個(gè)問題,如圖 17。當(dāng)方向向量增加到 36 時(shí),不會(huì)出現(xiàn)碰撞檢測(cè)失誤。但卻有一個(gè)非常明顯的缺點(diǎn) —— 增加了系統(tǒng)負(fù)擔(dān),在每一幀都必須對(duì)球體的36 個(gè)方向進(jìn)行檢測(cè),大大降低運(yùn)行速度。如果一個(gè)網(wǎng)格模型的頂點(diǎn)數(shù)目在 300 左右,那么每增加 8 個(gè)方向檢測(cè) fps 就會(huì)減少 1。也就是說 ~如果方向向量的數(shù)目從 36減少至 8,那么至少將 fps 提升 4。如果臺(tái)面上共有 10 個(gè)球,那么將 fps 在原有基礎(chǔ)上提高 40。效果驚人! 圖 15 碰撞異常狀態(tài) a 圖 16 碰撞異常狀態(tài) a 圖 17 增加檢測(cè)矢量方法 15 下面介紹另一個(gè)方法如圖 18:這時(shí)雖然球已經(jīng)與桌面相交,但方向向量并沒有檢測(cè)出碰撞若此時(shí)球繼續(xù)沿 v 方向移動(dòng)那么會(huì)出現(xiàn)下列狀況(圖 19),此時(shí)向量 a 檢測(cè)出了球體與球臺(tái)發(fā)生碰撞,設(shè)球與桌面的交點(diǎn)為 p,并設(shè) m_fDis是球心到 p 的距離, R 為球半 徑。如果此時(shí)將球沿 a 方向移動(dòng) Rm_fDis,與此同時(shí)調(diào)用碰撞反應(yīng)函數(shù),則可避免球與球臺(tái)的粘連。球與球臺(tái)的碰撞反應(yīng)涉及到向量的反射問題,基本方法如圖 20: AB 為反射平面, N 為平面 AB 的法線,向量 o 為平行四邊形的對(duì)角線。已知 a為入射線,且法線方向已知 ~則一定可以求出 a 在 N 上的投影 an 。 根據(jù)圖示可知: a+ an =1/2
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1