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

正文內(nèi)容

國內(nèi)賽車發(fā)展現(xiàn)狀和趨勢畢業(yè)論文(編輯修改稿)

2025-07-25 00:41 本頁面
 

【文章內(nèi)容簡介】 例如移動、動畫等。一完成上一幀的渲染,可變周期的Game 就會調(diào)用它的 Update方法。 的值設(shè)為false的話,Game就會使用可變周期的游戲循環(huán)。這種類型的Game要求游戲邏輯和動畫代碼是基于流逝的時間的,這樣才能保證游戲流暢地運行。因為前一個幀一完成就會立即調(diào)用Update方法,所以兩次調(diào)用Update方法之間的時間是可以變化的。不考慮調(diào)用之間的時間,游戲看起來好像是變快和減慢了??梢杂肬pdate方法的gameTime參數(shù)來得到兩次調(diào)用Update方法之間的流逝時間。當使用可變周期的游戲循環(huán)時,應(yīng)該確定游戲中的速率――比如精靈的移動距離--游戲中是以每毫秒為單位。在任何給定的游戲更新中,精靈移動的距離都可以使用流逝時間的速率來計算出來。用這種方法計算精靈的移動距離,即使游戲速度或計算機速度不同,也能保證精靈的連續(xù)移動。固定周期的Game 類以TargetElapsedTime中特定的固定時間間隔來調(diào)用它的 Update方法。,Game 就會使用固定周期的游戲循環(huán)。使用固定周期的話,游戲邏輯可以將Update作為其基本時間單位,并假設(shè)將以指定的時間間隔調(diào)用Update。如果Update運行得比預(yù)期的慢,Game類將通過加時調(diào)用Update來進行補償,并且丟棄掉那些無用的Update渲染的圖像來節(jié)省時間。這可以保證即使游戲循環(huán)比期望的要慢,也能調(diào)用足夠次數(shù)的Update。當使用固定的游戲循環(huán)周期,速率(例如精靈的移動距離)將由調(diào)用Update的次數(shù)決定,這通過調(diào)用Update來使用Update中的移動速率來改變精靈的位置。游戲周期流程圖如圖31所示:圖31 游戲周期流程圖。該方法開始游戲循環(huán),在調(diào)用Exit之前,每秒多次調(diào)用Update和Draw方法。游戲組件提供一種有標準組件的方法向游戲添加功能。通過通過繼GameComponent或DrawableGameComponent類來創(chuàng)建游戲組件。、 和 。、 ,update,還有initialize方法。 Input類Input類有許多輕松獲得所有最常用的鍵盤,鼠標和手柄鍵狀態(tài)的屬性。此類還提供了一些輔助方法來管理鍵盤輸入,文字輸入,當游戲發(fā)展并使用更多的用戶界面代碼時,就會覺得它們的用處了。此類最重要的方法是Update方法,該方法每一幀都被調(diào)用(在BaseGame類的Update方法中被自動調(diào)用)。通過Input類的屬性可獲取鼠標參數(shù),如果檢查是否有另一個鍵或按鈕被按下,可直接操作手柄和鍵盤狀態(tài),但對于鼠標,您只能通過Input類的屬性?,F(xiàn)在運行在PC上,會返回所有屬性。// Handle GamePad input, and also allow keyboard inputif ( ||){ ()。 selectedButton =(selectedButton + NumberOfButtons 1) % NumberOfButtons。}else if ( ||){ ()。 selectedButton = (selectedButton + 1) % NumberOfButtons。} GamePadUpJustPressed 方法代碼如下:/// Game pad up just pressedpublic static bool GamePadUpJustPressed{ get { return ( == amp。amp。 == ) || ( amp。amp。 )。 } // get} // GamePadUpJustPressed該代碼使用目前的手柄狀態(tài)(這是每幀開始時分配的)和上一幀的手柄狀態(tài)以按鍵狀態(tài)是否已經(jīng)發(fā)生變化。當寫更多的用戶界面代碼時,它將更容易檢查所有輸入狀態(tài),處理許多不同的輸入設(shè)備Update方法并沒有什么復(fù)雜,但它是Input類中最重要的部分,因為上一幀的所有狀態(tài)被復(fù)制,然后獲得每一個鍵盤,鼠標和手柄輸入的新狀態(tài)。這里有一些額外的代碼處理相對鼠標移動。鼠標的相對移動在XNA中不支持,不同于DirectX中的DirectInput類,它能讓您獲得相對鼠標位置去替代絕對鼠標位置,比如用相對坐標(,)替代絕對坐標(350,802)。大多數(shù)游戲屏使用一個特殊的背景紋理把大多數(shù)的信息顯示在屏幕上。在任務(wù)選擇畫面,您可以選擇四項任務(wù)中的其中一個,然后啟動游戲。其他屏幕只是顯示出一些信息和只有在Option屏幕上允許用戶可以一些東西。所有的游戲畫面在按下Back鍵后返回主菜單。游戲屏幕堆棧自動處理所有游戲屏幕,或使用更復(fù)雜的多層次的菜單系統(tǒng),并可以隨時返回以前的畫面。如果想返回到主菜單,只需移除堆棧中除最后一個以外的所有項。另一個我經(jīng)常使用的技巧是在主菜單前添加另一個屏幕。大多數(shù)游戲屏幕類也非常簡單。本游戲的用戶界面不是很復(fù)雜,由一個游戲主界面和多個子界面組成,各個界面直接可以自由銜接和跳轉(zhuǎn)。游戲主界面的基色是綠色,這樣本游戲可持續(xù)發(fā)展的主題也十分相符。游戲主界面如圖32所示:圖32 游戲主界面用戶界面的三大元素:圖片、按鈕、界面特效。l 圖片:是在屏幕上繪制2D圖片。l 按鈕:本身也是圖片,但需要經(jīng)過特殊加工。此外,按鈕具有交互能力,可以檢測鼠標、鍵盤輸入。這些交互都是通過坐標檢測來實現(xiàn)的,XNA不提供這些功能??梢哉f每一處的交換檢測都有一段相應(yīng)代碼與之對應(yīng)。l 界面特效:在用戶界面上加些動態(tài)特效,可以獲得更好的用戶體驗,這一點非常重要。比如在主界面中,黑色Jeep的車尾燈是和眼睛一樣一眨一眨的;當鼠標放入按鈕上時,按鈕會表現(xiàn)出放大縮小的連續(xù)動作。游戲中的顯示信息:l 污染條:顯示了賽車尾氣對環(huán)境的污染程度。如果污染到達一定程度,場景中樹葉、草地等會由綠色漸變?yōu)榭蔹S色。l 記分牌:顯示賽車成績。l 地圖雷達:詳細顯示各賽車的位置、行駛方向等信息。l 提示條:對玩家的行為作出友好的警告,是一種人性化提示。l 速度計:顯示玩家賽車當前速度值。此外,還有游戲設(shè)置界面、畫面設(shè)置界面、游戲選擇界面等等。用戶界面總體結(jié)構(gòu)如圖33所示:圖33 用戶界面結(jié)構(gòu)圖用一個矩陣保存相機位置和方向,這個矩陣叫做View矩陣(視矩陣,觀察矩陣)。要創(chuàng)建View矩陣,XNA需要知道相機的Position,Target和Up矢量。保存視錐體(view frustum),它是3D世界中實際可見的部分,在另一個叫做Projection的矩陣中。知道了相機的位置,觀察目標和相機的up方向,相機就唯一確定了。View矩陣由這三個向量決定,可以使用Matrix. CreateLookAt方法創(chuàng)建一個相機:Matrix viewMatrix。Vector3 camPosition = new Vector3(10, 0, 0)。Vector3 camTarget = new Vector3(0, 0, 0)。Vector3 camUpVector = new Vector3(0, 1, 0)。viewMatrix = (camPosition, camTarget, camUpVector)。相機的Position和Target向量指向3D空間中的真實位置,Up向量表示相機向上方向。例如,一個相機位于點(300,0,0)觀察點(200,0,0)。如果相機的Up向量只是簡單地向上,只需指定(0,1,0)Up向量,這不是指在3D空間中的點,這個例子中這個3D點為(300,1,0)。XNA為最常用的向量提供了一個快捷方式,Vector3. Up表示(0,1,0),Vector3. Forward表示(0,0,1),Vector3. Right表示(1,0,0)。XNA還需要Projection矩陣,這個矩陣可以看成映射從3D空間到2D窗口的所有點的一個東西。XNA可以創(chuàng)建這樣一個視錐體,它存儲在Projection矩陣中。通過調(diào)用Matrix. CreatePerspectiveFieldOfView創(chuàng)建這個矩陣:projectionMatrix = (viewAngle, aspectRatio, nearPlane, farPlane)。Matrix. CreatePerspectiveFieldOfView方法的第一個參數(shù)是觀察角度。它對應(yīng)金字塔頂角的一半。如果想知道自己的觀察角度,可以將手放在眼睛前面,就會發(fā)現(xiàn)這個角度約為90度。因為弧度PI等于180度,90等于PI/2。因為要指定觀察角度的一半,所以這個參數(shù)為PI/4。XNA坐標世界中攝像機模型如圖34所示:圖34 攝像機、移動攝像機①確定攝像機的世界坐標。 ②確定旋轉(zhuǎn)攝像機所需的觀察點 Vector3 ,在游戲中這個方向不能改變,并且將經(jīng)常是(0, 0, 1)或(0, 0, ?1)。// The direction the camera points without rotation.Vector3 cameraReference = new Vector3(0, 0, 10)。③創(chuàng)建一個旋轉(zhuǎn)矩陣來描述攝像機所面對的方向, CreateRotationY 來創(chuàng)建. Matrix rotationMatrix = (avatarYaw)。④通過 Transform 和旋轉(zhuǎn)Matrix 來轉(zhuǎn)換觀察點 vector 的副本。// Create a vector pointing the direction the camera is facing.Vector3 transformedReference = (cameraReference, rotationMatrix)。⑤將攝像機的當前位置添加到已經(jīng)轉(zhuǎn)換的方向vector中。此時的位置正對攝像機。// Calculate the position the camera is looking at.Vector3 cameraLookat = cameraPosition + transformedReference。⑥通過CreateLookAt創(chuàng)建新一個視圖( Matrix)。CreateLookAt所需參數(shù)為攝像機的位置,已轉(zhuǎn)換的方向向量。CreateLookAt的第三參數(shù)表示攝像機的向上方位,而且將經(jīng)常是(0, 1, 0)。視圖( Matrix)控制世界坐標如何轉(zhuǎn)換為攝像機的坐標。view = (cameraPosition, cameraLookat, new Vector3(, , ))。⑦用CreatePerspectiveFieldOfView創(chuàng)建投影矩陣,投影矩陣控制攝像機的坐標如何轉(zhuǎn)換為屏幕坐標。第一個參數(shù)是視圖的投影矩陣以弧度表示。一個典型的45度視圖會被表示為pi/。第三個參數(shù)指定可視區(qū)的最近與最遠的距離。// Field of view of the camera in radians (pi/4 is 45 degrees).static float FOV = 。// Z values of the near and far clipping planes.static float nearClip = 。static float farClip = 。Viewport viewport = 。float aspectRatio = (float) / (float)。proj = (FOV, aspectRatio, nearClip, farClip)。⑧循環(huán)這些步驟以繪制世界坐標中的每個物體。⒈創(chuàng)建一個轉(zhuǎn)換矩陣,來把物體從模型空間轉(zhuǎn)換為世界空間。world = (new Vector3(x * 3, 0, z * 3))。⒉用物體的世界矩陣乘攝像機的視圖矩陣乘攝像機的投影矩陣來創(chuàng)建世界視圖投影的組合矩陣。binedMatrix = world * view * proj。⒊。 [worldViewProjection].SetValue(binedMatrix)。⒋繪制物體。[0].SetSource(vb, 0, )。(, 0, 1)。Chase的含義是追蹤。也就是說這個攝像機是一直追蹤著賽車的。實際上只要對攝像機進行了良好的建模,跟隨攝像機與固定攝像機的構(gòu)建都不再是復(fù)雜的事。攝像機追逐原理如圖35所示:圖35 攝像機追逐原理建立攝影轉(zhuǎn)換矩陣需要三個參數(shù):攝像機的位置,攝像機的觀察方向以及攝像機的頂向量。最后一個參數(shù)“決定了”(并非參數(shù)本身)顯示在攝像機鏡頭中的景象的向上方向在3D坐標系中的方向。而計算透視轉(zhuǎn)換矩陣通常需要制定攝像機的近截面、遠截面以及攝像機成像的寬度和高度。由于飛車游戲中攝像機的近遠截面和成像的高寬都不需要改變,所以只需要在游戲初始化時計算出來便可以了,:ProjectionMatrix = (FieldOfView, aspectRatio, NearPlane, FarPlane )。其中的FieldOfView, aspectRatio, NearPlane, FarPlane均為常量。而計算攝影轉(zhuǎn)換矩陣的過程便在ChaseCamerca類的UpdateViewMatrix函數(shù)中。①首先重新計算了cameraLookVector。這是一個插值的過程:cameraLookVector = (cameraLookVector * ) + (wannaCameraLookVector * )。這里插值的主要目的是使攝像機的方向改變稍滯后于賽車方向的改變。②然后依據(jù)攝像機觀察點的位置和攝像機的方向計算攝像機的位置,并計算出攝影轉(zhuǎn)換矩陣:cameraPos = LookAtPos + cameraLookVector。rotMatrix = ( cameraPos, LookAtPos, CarUpVector )。③該函數(shù)同時實現(xiàn)了一個生動效果:當賽車碰撞到護欄時,攝像機
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1