夢幻之旅遊戲開發 輔助知識的了解

2022-02-20 18:45:17 字數 3838 閱讀 2205

如果一上來就讓大家接觸這乙個擁有3萬多行的**,我想也是非常困難的,鑑於此我決定先把基礎的東西弄好。下一步就簡單了。

1)graphicsdevicemanager:在xna類庫中,這個是非常重要的,它為開發者提供方法管理目標裝置的顯示卡資源。簡單的說就是呼叫顯示卡的乙個介面,該物件的graphicsdevice屬性代表當前目標裝置的顯示卡。

2)spritebatch:該物件的主要作用就是繪製文字和2d影象。在遊戲開發過程中,他的作用是非常重要的,因為遊戲需要的大部分是,文字和聲音等素材資源。所有遊戲中需要顯示的畫面都必須經過spritebatch物件中的draw方法來繪製。

3)initialize():該方法用來初始化遊戲程式的變數和物件。它允許遊戲在執行之前做一些初始化的操作。可以在此時長愛荷香任何需要的服務和載入與圖形無關的的內容。例如顯示卡裝置,遊戲的視窗大小等等。

4)loadcontent():當初始化完畢後,程式就進入loadcontent,該方法用來載入遊戲的素材,包括遊戲的模式、影象等。這個方法在乙個遊戲中只會呼叫一次,並且是載入所有素材的地方。

5)6)

draw():該方法相當於windows程式設計的paint,是系統自動繪圖的方法。

遊戲程式執行完loadcontent後,開始進入乙個遊戲迴圈,無論用什麼語言編寫遊戲程式,都需要乙個遊戲迴圈,這也是遊戲程式與應用程式的最大區別。在xna遊戲專案中,遊戲迴圈主要由update和draw兩個方法組成。xna的生命週期如圖18所示。

圖1 xna遊戲生命週期 

從上圖可知,當遊戲程式執行完initialize

,loadcontent

方法後,即初始化影象,聲音和輸入控制器,載入遊戲資源

(,聲音等

)後開始進入遊戲迴圈,

update

方法有兩個出口,如果遊戲繼續執行,則執行

draw方法;

如果遊戲結束,則執行

uploadcontent

方法。乙個遊戲基本上是乙個連續的迴圈體,它完成一系列的邏輯操作,並在螢幕上繪製影象,具體流程如下:

(1)初始化:在這一步中,遊戲程式執行標準的初始化操作,如分配記憶體,資源採集,從磁碟上載入資料等等,這和其他的windows應用程式一樣。

(2)進入遊戲迴圈:在這一步中,遊戲**將進入遊戲主迴圈,此時各種遊戲動作和情節開始執行,直到當接受到使用者退出遊戲的命令。

(3)獲取玩家的資訊:在這一步中,遊戲玩家的資訊被載入,已備下一步遊戲邏輯使用

(4)執行遊戲邏輯:這部分包括了遊戲**主體,其結果用於渲染下一幀物件

(5)渲染下一幀物件:玩家資訊的獲取和執行遊戲邏輯的結果被用來產生下一幀,這個影象通常放在不可見的快取區內,因此玩家不會看到它逐漸被渲染的過程。隨後該影象被拷貝到顯示儲存器中並顯示出來。

(6)同步顯示:通過由於遊戲複雜程度不同,遊戲在計算機上執行速度不同,使用定時器和等待函式確保遊戲和遊戲最大幀同步。

(7)迴圈:返回到遊戲入口並重新執行上述全部步驟。

(8)關閉:這一步遊戲結束,表示遊戲將退出主迴圈或者稱為遊戲迴圈,並回到作業系統,然而,在使用者進行結束之前,使用者必須釋放所有的資源並清理系統。

3.1廣度優先搜尋演算法

英語:breadth-first-search),又譯作寬度優先搜尋,或橫向優先搜尋,簡稱bfs,是一種

圖形搜尋演算法

。簡單的說,bfs是從

根節點開始,沿著樹的寬度遍歷樹的

節點。如果所有節點均被訪問,則演算法中止。廣度優先搜尋的實現一般採用open-closed表。

bfs是一種

盲目搜尋法

,目的是系統地展開並檢查

圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位址,徹底地搜尋整張圖,直到找到結果為止。bfs並不使用

經驗法則演算法

。他實現的主要

是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位址,徹底地搜尋整張圖,直到找到結果為止。

從演算法的觀點,所有因為展開節點而得到的子節點都會被加進乙個

先進先出的佇列

中。一般的實現裡,其鄰居節點尚未被檢驗過的節點會被放置在乙個被稱為 open 的容器中(例如佇列或是

鍊錶),而被檢驗過的節點則被放置在被稱為 closed 的容器中。(open-closed表)

(1)首先將根節點放入佇列中。(2

)從佇列中取出第乙個節點,並檢驗它是否為目標。如果找到目標,則結束搜尋並回傳結果。否則將它所有尚未檢驗過的直接子節點加入佇列中。(3

)若隊列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標。結束搜尋並回傳「找不到目標」。(4

)重複步驟2。

3.2深度優先搜尋是一種在開發爬蟲早期使用較多的方法。它的目的是要達到被搜尋結構的葉結點(即那些不包含任何超鏈的

html檔案

) 。在乙個html檔案中,當乙個

超鏈被選擇後,被鏈結的html檔案將執行深度優先搜尋,即在搜尋其餘的超連結果之前必須先完整地搜尋單獨的一條鏈。深度優先搜尋沿著html檔案上的

超鏈走到不能再深入為止,然後返回到某乙個html檔案,再繼續選擇該html檔案中的其他超鏈。當不再有其他

超鏈可選擇時,說明搜尋已經結束

。事實上,深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個

節點只能訪問一次.

舉例說明之:圖

2是乙個

無向圖,如果我們從a點發起深度優先搜尋(以下的訪問次序並不是唯一的,第二個點既可以是b也可以是c,d),則我們可能得到如下的乙個訪問過程:a->b->e(沒有路了!

回溯到a)->c->f->h->g->d(沒有路,最終

回溯到a,a也沒有未訪問的相鄰

節點,本次搜尋結束)

圖2無向圖簡要說明深度優先搜尋的特點:每次深度優先搜尋的結果必然是圖的乙個連通分量.深度優先搜尋可以從多點發起.如果將每個節點在深度優先搜尋過程中的"結束時間"排序(具體做法是建立乙個list,然後在每個節點的相鄰節點都已被訪問的情況下,將該節點加入list結尾,然後逆轉整個鍊錶),則我們可以得到所謂的"

拓撲排序"。

深度優先遍歷圖的方法是,從圖中某頂點v出發:

(1)訪問頂點v;

(2)依次從v的未被訪問的鄰接點出發,對圖進行

深度優先遍歷

;直至圖中和v有路徑相通的頂點都被訪問;

(3)若此時圖中尚有頂點未被訪問,則從乙個未被訪問的頂點出發,重新進行

深度優先遍歷

,直到圖中所有頂點均被訪問過為止。當然,當人們剛剛掌握深度優先搜尋的時候常常用它來走迷宮.事實上我們還有別的方法,那就是

廣度優先搜尋

(bfs).狀態(state):狀態是制問題求解過程中每一步的狀況。

算符(operater)算符是把問題從一種狀態變換到另一種狀態的方法代號。算符的取值範圍就是搜尋的範圍。(一般設為

區域性變數

)。結點(node):用來表明狀態特徵及相關資訊。

深度優先搜尋用乙個

陣列存放產生的所有狀態。

(1)把初始狀態放入

陣列中,設為當前狀態;

(2)擴充套件當前的狀態,產生乙個新的狀態放入

陣列中,同時把新產生的狀態設為當前狀態;

(3)判斷當前狀態是否和前面的重複,如果重複則回到上乙個狀態,產生它的另一狀態;

(4)判斷當前狀態是否為目標狀態,如果是目標,則找到乙個解答,結束演算法。

(5)如果

陣列為空,說明無解。

遊戲開發需要的背景知識

現在公認的第一款電子遊戲 也就是主機遊戲 是 1952 年面世的。遊戲玩的是井字棋,6 年後才出現了簡陋的網球遊戲。下面這幅圖就是井字棋遊戲,儘管它與 1952 年的遊戲畫面還是有所出入,但是遊戲內容是一樣的。此後,就進入了 雅達利 時期。隨後的 太空侵略者 是最經典的一款遊戲。在這之後,我們耳熟能...

軟體開發架構必須了解的知識

兩個程式之間通訊的應用大致可以分為兩種 第二種是web類程式 使用者只需要瀏覽器即可訪問程式。常見的web類應用程式 而這兩個分類又對應了兩個軟體開發的架構 服務端 要一直執行著給別人提供服務的機器 電腦 伺服器 客戶端與服務端的大致區別 一般客戶端負責和使用者的互動,服務端負責資料儲存。c s即 ...

從此開始我的OGRE開發3D遊戲之旅行。

已經學ogre好幾個星期了,由於加班和搜尋資料,所以直到現在才開始寫相關的ogre的學習歷程。我先在以下宣告一下 一 偶不是搞c 的,偶是從事delphi做2d網路遊戲的。二 偶是乙個新手,高手指點一下好了,文章是為和我一樣的新手看的,還有是給自己做筆記用的。所以,高人,看了別笑哦。不過大家都可以提...