510 likes | 715 Views
第五章 遊戲開發工具. 課前指引 「工欲善其事,必先利其器」,以早期的遊戲開發而言,它是一件既麻煩又辛苦的事情,例如在使用 DOS 作業系統的年代,要開發一套遊戲還必須要自行設計程式碼來控制電腦內部的所有運作,例如顯像、音效、鍵盤等。不過隨著電腦科技越來越進步的同時,新一代的遊戲開發工具已經可以大量改變這種困境。. 章節大綱. 5-1 遊戲開發工具簡介. 5-6 OpenGL. 5-2 C/C++ 程式語言. 5-7 DirectX. 5-3 Visual Basic 程式語言. 5-4 Java 程式語言.
E N D
第五章 遊戲開發工具 課前指引 「工欲善其事,必先利其器」,以早期的遊戲開發而言,它是一件既麻煩又辛苦的事情,例如在使用DOS作業系統的年代,要開發一套遊戲還必須要自行設計程式碼來控制電腦內部的所有運作,例如顯像、音效、鍵盤等。不過隨著電腦科技越來越進步的同時,新一代的遊戲開發工具已經可以大量改變這種困境。
章節大綱 5-1 遊戲開發工具簡介 5-6 OpenGL 5-2 C/C++程式語言 5-7 DirectX 5-3Visual Basic程式語言 5-4 Java程式語言 5-5 Flash與ActionScript 備註:可依進度點選小節
5-1 遊戲開發工具簡介 • 程式是整個遊戲軟體的核心。 • 當然只是寫寫一些小遊戲,自然可以方便使用自己最熟悉的程式語言與工具。 • 如果要從事的是中大型遊戲的開發,考慮商業謀利的可能性,則使用的程式語言與開發工具,更是左右成本與獲利的主因。
5-1 遊戲開發工具簡介 • 程式語言的選擇 • 選用正確的整合開發工具,可把有關程式的編輯(Edit)、編譯(Compile)、執行(Execute)與除錯(Debug)等功能於同一操作環境下,簡化程式開發過程的步驟。 • 讓使用者只需透過此單一整合的環境,即可輕鬆撰寫程式,因而對遊戲開進度具有決定性影響。 • 整合式開發環境的選用,無論是程式語言本身複雜度、程式語言本身的功能性與可使用的外部支援。
5-1 遊戲開發工具簡介 • 執行平台的考量 • 以目前使用者端的作業系統佔有率來說,Windows作業系統的佔有率最高。 • 因此目前市面上可看到的遊戲多以Windows作業平台為主,而少數的遊戲也會考慮到Linux作業平台的玩家來設計。 • 一些程式語言或工具所製作出來的遊戲,其本身就已經綁死在某一個作業平台上。 • 例如Visual Basic所撰寫出來的遊戲,就只能在Windows作業系統上執行。
5-1 遊戲開發工具簡介 • 遊戲工具函式庫的功用 • 為了解決與電腦之間這種較為低階的動作,繪圖顯示卡廠商們就共同研發了一套成像標準函式庫「OpenGL」與微軟公司所自行開發的工具函式庫集「DirectX」。 • 使用工具函式庫的目的是要讓使用者能夠更加輕易地開發一套遊戲。
5-1 遊戲開發工具簡介 • COM介面 • 就是電腦硬體內部與程式間溝通的橋樑。 • 簡單的說,程式必需要先經過COM介面的解譯才能直接對CPU、顯示卡或其它的硬體設備做要求或反應。
5-2 C/C++程式語言 • C++以C語言為基礎,改進了一些輸出輸入的方法、加入了物件導向的觀念。 • 如果要撰寫中大型遊戲的話,多使用C/C++來撰寫程式。 • C/C++是所有程式設計人員公認功能強大的程式語言,也是執行時具有優良速度表現的程式語言。 • 使用C/C++所開發出來的程式,在測試除錯時所花費的成本有時並不比開發程式來得少。
5-2 C/C++程式語言 • 執行平台 • 機器語言是由0與1所組合而成的語言,在不同作業平台上,對機器語言的定義就不相同。 • C/C++所撰寫出來的程式有利於呼叫系統所提供的功能,因為早期一些作業系統本身就多以C/C++程式語言來撰寫。 • 在呼叫系統功能或元件時最為方便,例如呼叫Windows API(Application Programming Interface)、DirectX功能等等。
5-2 C/C++程式語言 • 語言特性 • C++以C為基礎,改進一些輸入與輸出上容易發生錯誤的地方,保留指標功能與既有的語法,並導入了物件導向的觀念。 • C/C++必須編譯為電腦可理解的機器語言,所以在執行時可直接載入記憶體,而無需經過中間的轉換動作。 • 所以利用C/C++來撰寫程式,在速度上會有較優良的表現,不過在追求更高執行速度時,往往還會搭配組合語言來撰寫一些基礎程式,尤其是在處理一些低階圖像繪圖。
5-2 C/C++程式語言 • 開發環境介紹 • 近年來,C++ Builder逐漸有人拿來開發一些遊戲,因為它使用上較為方便,然而它包裝了更多的預設元件,所以執行速度上略差於Visual C++。 • 然而這點被日漸提昇的電腦執行速度所彌補了,目前較常用來作為一些遊戲設計時的輔助。 • 例如設計地圖編輯器等,由於本身都是使用C++語言來撰寫,因此在元件的功能溝通上並不會發生問題。
5-2 C/C++程式語言 • Visual C++與遊戲設計 • VC++則是微軟公司所開發出的一套適用於C/C++語法的程式開發工具。 • 在VC++的開發環境中,對於撰寫Windows作業系統平台的視窗程式有兩種不同的程式架構: • 一是微軟在VC++中所加入的MFC(Microsoft Foundation Class Library)架構。 • 一則是Windows API架構,使用Windows API來開發上述的應用軟體程式並不容易,但用在設計遊戲程式上卻相當簡單且具有較優異的執行效能。
5-3 Visual Basic程式語言 • BASIC(Beginner’s All-purpose Symbolic Instruction Code)屬於一種直譯式高階程式語言,相當受到一般電腦入門者的喜愛。 • Visual Basic嚴格來說並不僅是程式語言,它與開發環境緊緊結合在一起。 • 也就是說您無法只使用純文字編輯器來撰寫Visual Basic後進行編譯。 • 必須使用Visual Basic開發程式來進行程式的撰寫。
5-3 Visual Basic程式語言 • 執行平台 • Visual Basic所開發出來的程式,只能在Windows作業系統上執行。 • 必須額外將些Visual Basic執行時所需的元件(類似虛擬機器)安裝至作業系統中,才能執行Visual Basic程式。 • 如果您的電腦之前完全沒有安裝過這類程式,當直接開啟可執行檔,程式並無法執行 。
5-3 Visual Basic程式語言 • 語言特性 • Visual Basic最令初學者接受的是其撰寫的環境,它提供了許多現成的元件,初學者只要使用滑鼠就可以利用拖曳點選的方式來輕鬆完成一個介面。 • 當程式語言越簡易越方便使用時,其另外一面就是有限的功能性 。 • Visual Basic並不具備完整的物件導向功能,在6.0之後的Visual Basic.NET中才具有較好的物件導向功能。
5-3 Visual Basic程式語言 • Visual Basic與遊戲設計 • Visual Basic所開發的程式有一個致命的缺點:「慢」。 • 為了鼓勵程式設計人員多多使用Visual Basic來撰寫遊戲,微軟在DirectX7之後提供了Visual Basic呼叫的介面機制。 • 使得Visual Basic在繪圖、裝置資料的擷取上都有了明顯的速度提昇,而結合Visual Basic本身簡單易用的功能,使得Visual Basic設計遊戲的程式人員也有顯著的提昇。
5-4 Java程式語言 • Java程式語言以C++的語法關鍵字為基礎,由Sun公司所提出,其計畫一度面臨停止的可能性,然而後來卻因為網際網路的興起,使得Java頓時之間成為當紅的程式語言。 • 程式語言在網際網路平台佔有優勢,就表示它具有跨平台的優點,然而Java非常適合拿來進行遊戲製作。 • 而事實上也早有一些書籍專門在介紹Java於遊戲設計上之應用。
5-4 Java程式語言 • 執行平台 • 所謂的跨平台,指的是Java程式可以在不重新編譯的情況下,直接於不同的作業系統上運作。 • 這個機制之所以可以運行的原因在於「位元組碼」(Byte Code)與「Java執行環境」(Java Runtime Environment)的配合。
5-4 Java程式語言 • Java程式的執行流程
5-4 Java程式語言 • 語言特性 • Java程式是以C++的關鍵字語法為基礎。 • 目的在於使得C/C++的程式設計人員能快速入手Java程式語言。 • 而Java也過濾了C++中一些容易犯錯或忽略的功能,例如指標的運用,並採用「垃圾收集」(Garbage Collector)機制來管理無用的物件資源。 • 有撰寫Java程式的第一步就是定義類別(class),若非執行速度上的考量,其實Java程式本身相當適用於中大型程式的開發。
5-4 Java程式語言 • Java與遊戲設計 • 執行速度永遠是遊戲進行時的一個重要考量。 • Java程式本身無論是在繪圖、網路、多媒體等各方面都提供有相當多的API程式庫,甚至包括了3D領域。 • 使用Java程式來設計遊戲可以獲得更多的資源,而Java程式可以使用Applet來展現的特性,更使得其有更大的發揮空間。
5-5 Flash與ActionScript • Flash是一套由Macromedia所推出的動畫設計軟體,因為是採用向量圖案來產生動畫效果。 • 所以具有檔案容量小的優點,非常適用於網路上的傳輸。 • Flash主要的舞台是在網路,它可以內嵌於網頁之中,也可以編譯為Windows中可單獨執行的exe檔。 • 要執行Flash動畫的話,使用者的電腦中必須安裝Flash Player的播放器。
5-5 Flash與ActionScript • 時間軸 • 補間動畫的基本原理是利用「時間軸」,也就是在每個時間片段上設定動畫的起點與終點。 • 設定圖片的移動軌跡,而中間的移動過程則由播放程式自行計算,因此即使是複雜的軌跡運動,所使用到的圖片永遠只有一張。 Flash 動畫製作的基本原理
5-5 Flash與ActionScript • Flash與遊戲設計 • 在新版本的Flash 更在Action Script中加入了物件導向的特性,使得Action Script逐漸有走向程式設計應用的趨勢。 • Flash在設計遊戲的定位上算是相當清楚的,一些2D平面遊戲都可使用Flash撰寫,也可適當地規畫製作出闖關遊戲、平面RPG遊戲。 • Flash是由Macromedia公司所提出,該公司看好網路遊戲與動畫的市場,也不斷的積極增強Flash與Action Script的功能。
5-6 OpenGL • Direct3D對於PC遊戲的玩家,可以說是相當熟悉的字眼。 • 由於PC上的遊戲大多使用Direct3D開發,因此想要執行PC遊戲,就必須擁有一張支援Direct3D的3D加速卡。 • 然而現在大多的3D加速卡規格說明中,卻多半註明了支援OpenGL加速。
5-6 OpenGL • OpenGL簡介 • OpenGL是SGI公司於1992年所提出的一個製作2D與3D的圖形應用程式的API 。 • 是一套「計算機三維圖形」處理函式庫。 • 在電腦繪圖的世界裡,OpenGL就是一個以硬體為架構的軟體介面。 • 程式設計者在開發過程中可以利用Windows API來存取檔案,再以OpenGL API來完成即時的3D繪圖。
5-6 OpenGL • OpenGL發展史 • 目前OpenGL版本為2.1版。 • OpenGL後來被設計成獨立於硬體與作業系統的一種顯示規範,它可以運行於各種作業系統與電腦上。 • 能在網路環境以客戶端(Client)和伺服器(Server)模式之下工作,它是專業圖形處理與科學計算等高階應用領域的標準圖形函式庫。 • 它在低階成像應用上的主要競爭對手是微軟的Direct3D圖形函式庫。
5-6 OpenGL • OpenGL函式說明 • OpenGL可分為程序式(Procedural)與非描述式(Descriptive)兩種的繪圖API函式。 • 程式開發者不須要直接描述一個場景,而只須要規範一個外觀特定效果的相關步驟。 • 這個步驟則是以API的運作方式去呼叫的,其優點是可攜性高,以及具有超過2000以上的指令與函式之繪圖功能。
5-6 OpenGL • GLU與GLUT函式庫 • GLU函數庫(OpenGL Utility Library):GLU是用來協助程式設計師處理材質、投影與曲面模型的函式庫。 • GLUT(OpenGL Utility Toolkit):GLUT主要是用於簡化視窗管理程式碼的撰寫。不只有Microsoft Windows系統,而是包括支援視窗形式的作業系統,如Mac OS、X-Window(Linux/Unix)等。
5-6 OpenGL • 範例:「全方位3D遊戲」(一) • 使用Flat Shading,可以看到很明顯的三角形
5-6 OpenGL • 範例:「全方位3D遊戲」(二) • 使用Gouraud Shading,畫面明顯平順許多
5-6 OpenGL • OpenGL的運作原理(1) • 當撰寫OpenGL的程式,必須先建立一個供OpenGL繪圖用的視窗。 • 利用GLUT來產生一個視窗,並取得該視窗的裝置本文(Device Context)代碼,再透過OpenGL的函式來進行OpenGL的初始化。 • 其實OpenGL的主要用意是在於使用者在表現高階需求的時候,可以利用低階的OpenGL來控制。
5-6 OpenGL • OpenGL的運作原理(2) • 當OpenGL在處理繪圖資料時,它會將資料填滿整個緩衝區,而這個緩衝區內的資料包含指令、座標點、材質資訊等,再等指令控制或緩衝區被清空(Flush)的時候,將資料送往下一個階段裡去做處理。
5-6 OpenGL • 軟體要求 • 通常顯示卡廠商會提供GDI(Graphics Device Interface,繪圖裝置介面)的硬體驅動程式來達成畫面輸出需要。 • 而OpenGL的主要工作就是接受這種繪圖需求,並且將這種需求建構成一種影像,然後再將影像交給GDI處理,最後再由GDI送至繪圖顯示卡上。 • OpenGL的軟體要求必須透過CPU計算,再送至GDI處理影像,再由GDI將影像送至顯示裝置,這樣才能算是一次繪圖顯像處理動作。
5-6 OpenGL • 硬體要求 • OpenGL的硬體處理要求是將顯像資料直接送往繪圖顯示卡上。 • 現在繪圖顯示卡技術提升與價格低落的情況下,幾乎每一張繪圖顯示上都有轉換與燈光(T&L)的加速功能了。 • 加上繪圖卡上的記憶體不斷地擴充,因此,在繪圖顯像的過程中似乎都不需要經過CPU和主記憶體的運算了。
5-7 DirectX • 現在玩Windows環境下的遊戲時,就不需要做這些硬體設備的設定了。 • 因爲DirectX提供了一個共同的應用程式介面,只要遊戲本身是依照DirectX方式來開發的話,不管使用的是哪一家廠商的顯示卡或音效卡。 • 它統統都可以被遊戲所接受了,而且DirectX還能發揮比DOS下更佳的聲光效果。 • 當然,在這些前提之下,顯示卡或音效卡的驅動程式也必須要支援DirectX才行。
5-7 DirectX • DirectX SDK簡介 • DirectX套件是由「執行時期」(Runtime)函式庫與「軟體開發套件組」(Software Development Kit, SDK)兩個部份組成。 • 當應用DirectX技術的遊戲在開發階段時,程式開發人員除了利用DirectX的執行時期函式庫外。 • 還可以透過DirectX SDK中所提供的各種控制元件,來進行硬體的控制及處理運算。
5-7 DirectX • DirectX SDK的內容表
5-7 DirectX • DirectGraphics • DirectGraphics是DirectX9的內建套件之一,它負責處理2D與3D的影像運算,並支援多種硬體加速功能。 • DirectDraw在使用上與Windows GDI相似且簡單易學,使用者可以利用顏色鍵作去透空處理。 • DirectDraw除了簡單外,要做出相當炫的特效,還是得自己動手寫。 • 在3D硬體加速卡如此普級化的今天,運用3D功能作出超炫的畫面也是輕而易舉。
5-7 DirectX • DirectSound • DirectSound套件則比MCI功能更為複雜與多元與複雜,是一種用來處理聲音的API函式。 • DirectSound對於一個音效的播放區分為數個物件成員,我們僅介紹幾個較為具體的成員,它們分別是:音效卡(DirectSound)、2D緩衝區(DirectSoundBuffer)、3D緩衝區(DirectSound3DBuffer)與3D空間傾聽者(DirectSound3DListener)。
5-7 DirectX • 音效緩衝區 • 在DirectSound中的音效緩衝區有2D緩衝區與3D緩衝區兩種,緩衝區是用來載入音效檔案,一個緩衝區只用來載入一個音效檔案。 • 3D音效在播放有幾種可能的移動,一是音源不動,而傾聽者移動,二是傾聽者不動而音源移動,三是音源與傾聽者一起移動。
5-7 DirectX • 聲音錐 • 當傾聽者位於聲音錐內時,所聽到的聲音會比較清楚,如果傾聽者位於聲音錐外,所聽到的聲音會比較小聲。 • 而聲音也具有一定的擴散性,我們可以使用聲音錐的角度來設定。 • 在DirectSound的設定中,還可以設定內層聲音錐與外層聲音錐,內層聲音錐所聽到的聲音會比外層聲音錐所聽到的聲音來得大,外層聲音錐也可以設定它的音量。
5-7 DirectX • DirectInput • DirectInput是用來處理遊戲的一些週邊設備裝置,例如搖桿、GamePad介面、方向盤、VR手套、力回饋等週邊裝置。 • DirectInput元件對於操作裝置是以「軸」與「按鈕」來定義,它將操作裝置分為三類:「鍵盤」、「滑鼠」與「搖桿」。
5-7 DirectX • 鍵盤 • 它屬於沒有軸的操作裝置,而鍵盤基本上具有101個以上的按鍵,所以鍵盤在DirectInput的定義上,就屬於「無軸」、「多按鈕」的操作裝置。 • 使用DirectInput來操作鍵盤比使用Windows事件處理來操作鍵盤擁有更多的優點。 • 由於DirectX的成員都可以直接存取目的裝置,而無需透過Windows的訊息。 • 所以使用DirectInput直接存取鍵盤裝置,會比使用Windows事件處理來得反應快速。
5-7 DirectX • 滑鼠 • 滑鼠是利用軌跡球的滾動或是光線的相對位移(指光學鼠)來決定其移動量。 • 所以滑鼠的操作具有方向性,但是滑鼠的移動並沒有原點依據,它所採用的是「相對軸」。 • 在DirectInput的定義中,滑鼠屬於「多按鈕」、使用「相對軸」的操作裝置。
5-7 DirectX • 搖桿 • 在DirectInput中對搖桿的定義為「多軸」與「多按鈕」的操作裝置。 • 無論該搖桿長的多怪異,操作方式多複雜,都將其歸類於軸與按鈕的操作。 • 在DirectInput中定義有兩種搖桿類型,一種為6個軸、32個按鈕的一般搖桿,一種為24軸、128個按鈕的新型搖桿。
5-7 DirectX • DirectShow (1) • DirectShow是DirectX中負責多媒體檔案播放的主要元件,它不僅使用簡單,更支援MPEG、AVI、MOV、MIDI、MP2與MP3等多媒體格式。 • DirectShow的運作方式不同於DirectSound與DirectMusic元件,而是透過「過濾器」(Filter)技術來進行媒體檔案的播放作業。
5-7 DirectX • DirectShow (2) • 例如系統將MPEG格式的視訊檔案,透過資料流方式輸入到DirectShow過濾器中,過濾器再根據所輸入的媒體格式進行解壓工作,最後才將未經壓縮的影像畫面傳送到顯示卡加以顯示。如下圖所示:
5-7 DirectX • DirectShow (3) • 通常DirectShow元件本身可以擁有多組過濾器,來負責不同媒體格式檔的運算處理。這些過濾器可以相互組合使用,也就是使用者可將第一個過濾器的運算結果輸出資料流,導向第二個過濾器作進一步處理。如下圖所示:
5-7 DirectX • DirectPlay • DirectPlay是爲了滿足近來流行的網路遊戲而開發的API,此外也提供網路對談的功能,以及保密的措施。 • DirectPlay可以協助分析出幾種不同的通訊協定之間的差異性。 • 如果使用DirectPlay,便可以撰寫一套支援IPX、TCP/IP、序列、數據機通訊,以及其它不同網路通訊協定的程式碼,否則就必須自行開發這些不同且繁雜瑣碎的通訊協定程式碼。