動畫與遊戲設計 遊戲開發工具 程于芳 老師 yfcheng@cc.ncue.edu.tw
目錄 遊戲開發工具簡介 C/C++程式語言 Visual Basic程式語言 Java程式語言 Flash與ActionScript
遊戲開發工具簡介 程式語言的選擇 執行平台的考量 遊戲工具函式庫的功用 常見的開發語言:C/C++、JAVA、Visual Basic等。 整合開發工具(Integrated Develop Environment, IDE):將程式的編輯 (Edit)、編譯(Compile)、執行(Execute)、除錯等功能於同一操作環境下,簡化程式開發步驟。如Visual C++、Borland C++ Builder等。 使用正確的整合開發工具,對遊戲開發進度有幫助。 執行平台的考量 考慮玩家所使用的平台,如Windows、Linux、麥金塔等。目前市場上以Windows作業平台為主。 須考慮所選的程式語言與平台的相容性,例如Visual Basic只能在Window作業系統上執行。 遊戲工具函式庫的功用 使用工具函式庫的主要目的為使用者能輕易地開發一套遊戲。如OpenGL、DirectX。 成像標準函式庫在製作遊戲時所佔的地位。如圖 使用者 程式 開發 函式庫 COM介面 (Component Object Model) 硬體設備
遊戲開發工具簡介 函式庫是用於開發軟體的子程式集合。函式庫和可執行檔案的區別是,函式庫不是獨立程式,他們是向其他程式提供服務的代碼。 COM (Component Object Model) :COM介面是電腦硬體內部與程式間溝通的橋樑,程式須先經過COM介面的解譯才能直接對CPU、顯示卡或其它的硬體設備做要求或反應。
C/C++程式語言
C/C++程式語言 C語言:程序導向的語言,著重程式設計的邏輯、結構化的語法。 C++:以C為基礎,改進輸出輸入的方法,加入物件導向觀念。 適用於撰寫大型遊戲,功能強大,執行速度快,但使用上較為複雜,測試成本高。
C/C++程式語言 執行平台 C/C++為高階語言,使用上貼近於人類語意的語法,讓程式設計人員以人類思考方式來撰寫語言,例如if、else 、for 、while等語法。 右方為一小段C語言程式碼 NotePad #include<stdio.h> int main(void) { int int_num; printf(“請輸入一個數字:”); scanf( “%d”, &int_num ); if (int_num%2) puts(“您輸入一個奇數。”); else puts(“您輸入一個偶數。”); return 0; } 電腦無法直接了解C/C++程式語言所撰寫出來的程式,必須經過「編譯器」(Compiler)的編譯,將語法解譯為電腦所看得懂的機器語言。
C/C++程式語言 執行平台 編譯器(Compiler):採用整批作業(Batch)方式來處理程式轉譯的工作,可將原始程式區分為數個階段轉換為機器可讀的可執行檔。經過編譯後,會產生「目的檔」(.obj)和「執行檔」(.exe)兩個檔案。當原始程式每修改一次就必須重新編譯。 C/C++所提供的標準函式庫有限,常須叫系統所提供的功能,因此使用C/C++所撰寫的程式,通常只能於單一平台上執行。
C/C++程式語言 執行平台 C/C++撰寫出來的程式在呼叫系統功能或元件時較為方便,因為早期有些作業系統是以該程式語言撰寫,例如呼叫Windows API、DirectX功能等。
C/C++程式語言 語言特性 C語言:「指標」(Pointer)功能可讓程式設計人員直接處理記憶體的資料,也可達到動態規劃功能。例如記憶體的配置管理、動態函式執行。 C++:以C為基礎,改進輸出輸入上容易錯誤的方法,保留指標功能與既有語法,並導入物件導向觀念。目前大型遊戲許多都是以C++開發。 C語言 物件導向概念 C++語言
C/C++程式語言 語言特性 動態函式庫: 附檔名:通常為 libxxx.so 的類型; 編譯行為:編譯時執行檔中僅具有指向動態函式庫所在的指標而已,並不包含函式庫的內容,所以檔案會比較小。 獨立執行的狀態:不能被獨立執行,程式讀取函式庫時,函式庫『必須要存在』,且函式庫的『所在目錄也不能改變』。 升級難易度:函式庫升級後,執行檔不需要進行重新編譯,故目前的 Linux distribution 比較傾向使用動態函式庫。
C/C++程式語言 語言特性 物件導向將現實生活中的人、事、物在程式中具體的以物件來表達,這使得程式能處理更複雜的行為模式。
C/C++程式語言 開發環境介紹 商業軟體:微軟Visual C++、Borland 的C++ Builder 非商業軟體:Dec C++ 、Kdevelop 通常商業軟體提供的功能較多,使用上更方便,對程式的測試與除錯功能也更完備。 C++ Builder 執行速度較快,但使用時的複雜度較高,由於它包裝了更多預設元件,使用上較為方便,所以使用速度上略差於Visual C++,目前常用來作為一些遊戲設計時的輔助,例如設計地圖編輯器等。
C/C++程式語言 開發環境介紹 地圖編輯器:玩家可以自己快速簡易的製造出這遊戲引擎可以使用的場景,及設置地形、在任何位置放置建築,玩家可以將山改成河流或增添島嶼等。例如魔獸爭霸2就有提供地圖編輯器功能。
C/C++程式語言 開發環境介紹 地圖編輯器製作畫面: 圖片來源: http://www.twbbs.net.tw/2219857.html
C/C++程式語言 開發環境介紹-Dev C++開發環境
C/C++程式語言 Visual C++與遊戲設計 目前一般大型商業遊戲軟體的開發模式,大多採用Visual C++(簡稱VC++)程式開發工具搭配Windows API程式架構來撰寫,以提升遊戲程式執行時的效能。 VC++是微軟開發的一套適用於C/C++語法的程式開發工具
C/C++程式語言 Visual C++與遊戲設計 在VC++開發環境中,對撰寫Windows作業系統平台的視窗程式有兩種不同的程式架構: MFC(Microsoft Foundation Class Library):一個龐大的類別函式庫,提供完整開發視窗程式所需的物件類別與函式,常用於設計一般的應用軟體程式。 Window API( Application Program Interface)架構:是Windows作業系統所提供的動態連結函式庫(通常以.DLL的檔案型態存在於Windows系統中),Windows API包含了Windows 核心及所有應用程式所需要的功能。其用在設計遊戲程式上相當簡單且具有較優異的執行功能
C/C++程式語言 Visual C++與遊戲設計 在VC++的開發環境下,只要在專案中設定好所要連結的函式庫並引用正確的標頭檔,就可容易的使用。 C++遊戲 大富翁(遊戲來源:GAMEBASE討論區)
Visual Basic程式語言
Visual Basic程式語言 微軟在1991年推出Visual Basic程式開發環境,將傳統BASIC語言導入視覺化概念,讓使用者可直接透過表單設計視窗來建立程式的輸出入介面,而不需要撰寫任何程式碼內容,並可描述介面中所有元件的外觀、配置與屬性。 對於初學者來說最容易上手,但執行速度緩慢,且功能性有限,對於大型遊戲而言,Visual Basic的速度與功能顯得不足,而且僅支援到DirectX 8.0版本。
Visual Basic程式語言 Visual Basic的設計環境是由多種工具列與工作視窗所組成: 圖片來源:http://yes.nctu.edu.tw/VB/
Visual Basic程式語言 執行平台 VB屬於高階語言,必須經過編譯的動作才能在電腦上執行。 VB程式只能在Windows作業系統上執行,且須額外將VB執行時所需的元件(類似虛擬機器)安裝到作業系統中,才能執行。 Visual Basic可呼叫Window API 與DirectX等元件,若呼叫Windows API,需注意平台相依問題,因為有些API在Windows95/98及Windows2000/XP/Vista上有些不同。
Visual Basic程式語言 語言特性 Visual Basic 無資料型態轉換的問題,系統會自動進行轉換。 Visual Basic不使用指標及不具備完整的物件導向功能,在6.0之後的Visual Basic.Net中才具有較好的物件導向功能。 VB語法關鍵字比C/C++更貼近人類語意。其撰寫環境提供許多現成元件。
Visual Basic程式語言 語言特性 VB程式內容參考: NotePad Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer) Form1.PaintPicture Picture1,0,10,w, _ xc –w / 2,0,w,h,vbsrcCopy If KeyCode=39 Then xc=xc-10 End If End Sub
Visual Basic程式語言 Visual Basic與遊戲設計 使用VB開發遊戲相當直覺與方便,但對圖像與繪圖的處理速度非常慢。 微軟在DirectX7之後提供VB呼叫的介面機制,VB可以跳過作業系統直接存取繪圖裝置、輸入裝置、音效裝置,這使VB在繪圖、裝置資料的擷取有明顯的速度提升。 先天的限制導致VB在大型遊戲的開發上仍不足以勝任。
Java程式語言
Java程式語言 Java以C++的語法關鍵字為基礎,由Sun公司所提出。
Java程式語言 執行平台 Java具有跨平台的能力,跨平台是指JAVA程式可以在不重新編譯下,直接於不同的作業系統上運作,這個機制可以運行的原因在「位元組碼」(Byte Code)與「Java執行環境」(Java Runtime Environment)的配合。
Java程式語言 執行平台 Java程式執行流程 位元組碼為一種貼近於機器語言的編碼 Java程式(*.java) Java編譯器 位元組碼(*.class) Java直譯器 機器語言 載入記憶體中執行
Java程式語言 執行平台 直譯器(Interpreter):使用直譯器來翻譯程式的過程中,不需要產生目的檔,直譯器會將程式一行一行的讀入,並且逐行翻譯,並送交由電腦執行。編譯器形成可執行檔其執行速度快,但中間過程較為耗時繁瑣;直譯器其執行速度慢,但中間過程較為簡單利用這種方式完成的程式語言。 Java執行環境建構於作業系統上的虛擬機器,程式人員只要針對這個執行環境進行設計即可。
Java程式語言 執行平台 Java程式應用於遊戲上有兩種展現方式: 運用視窗應用程式 使用Applet內嵌於網頁中:使用者瀏覽到Java Applet程式的網頁時,會將Applet程式檔案下載,由瀏覽器啟動Java虛擬機器以執行Java程式,在這方面可稱Java是以網路作為他的執行平台。
Java程式語言 執行平台 程式設計人員 Java執行環境 程式設計人員只要針對Java執行環境進行設計即可 作業系統 電腦硬體
Java程式語言 語言特性 Java以C++的語法關鍵字為基礎,目的在於使C/C++程式設計人員快速入手Java程式語言。 Java過濾C++中易犯錯及忽略的功能,例如指標的運用,並採用「垃圾收集」(Garbage Collector)機制來管理無用的物件資源。 Java與C++語法上的不同點為,Java為完全物件導向語言,C++為具有物件導向功能。 若非執行速度上的考量,Java適用於中大型程式的開發。
Java程式語言 語言特性 Java程式語言內容參考 NotePad public static void main(String args[]) { ex1103 frm= new ex1103(); } Private void check() for(int i=0;i<p.length;i++) if (p[i].px<0 || p[i].px>400) p[i].dx=-p[i].dx;
Java程式語言 Java與遊戲設計 Java程式執行前必經過第二次編譯,且Java程式只有在需用到某些類別庫時才載入相關的類別,造成執行速度上的拖累。 Java在繪圖、網路、多媒體、3D方面提供相當多的API程式庫,用來設計遊戲可獲得更多資源。 Java的整合開發環境 商業軟體:Visual J++、JBuilder 非商業軟體:Forte 、Netbeans Java應用於中大型的例子不多,所以整合式開發環境對遊戲設計的影響不大。
Java程式語言 Java與遊戲設計 Java線上小遊戲: 反應類:傳統食鬼(遊戲來源:瘋之谷) 反應類:冰與火 反應類:撞磚(遊戲來源:瘋之谷)
Java程式語言 Java與遊戲設計 Java手機遊戲免費下載:捉魚網 Java手機遊戲安裝(以Sony Ericsson為例) 打開其它資料夾 選擇所要安裝的jar檔案 安裝過程中請稍候
Java程式語言 Java與遊戲設計 選擇要安裝於哪個資料夾下 選擇是否馬上啟動 啟動該遊戲後,該遊戲可選擇語言別 39
Java程式語言 Java與遊戲設計 進入該遊戲 選擇開始遊戲 該遊戲可選擇單人或多人遊戲 40
Java程式語言 Java與遊戲設計 開始遊戲 打開遊戲資料夾 顯示剛才已安裝的遊戲 41
Flash與ActionScript
Flash與ActionScript Flash是由Macromedia所推出的動畫設計軟體。 Flash主要舞台為網路,其可內嵌於網頁中,也可編譯為Windows中可單獨執行的exe檔,要執行Flash動畫,使用者電腦須安裝Flash Player的播放器。
Flash與ActionScript Flash遊戲 內嵌式: 執行檔(exe檔): 裝扮類:變裝玩偶(遊戲來源:史萊姆的第一個家) 反應類:新版食鬼 (遊戲來源:益智遊戲網) 益智類:百萬富翁(遊戲來源:瘋之谷) 運動類:重量級拳賽 (遊戲來源:瘋之谷) 反應類:手動電池棒(一) (遊戲來源:瘋之谷) 執行檔(exe檔): 益智類: ZooKeeper
Flash與ActionScript Flash可重複利用圖片片段,加上補間動畫方式來達到圖片使用量的最小化,且可對圖片進行壓縮,並針對已下載的圖片先播放,不須等到所有圖片都下載完畢。 Flash動畫製作的方式節省大量圖片檔案的應用,且可省去對貼圖動作的程式設計成本。
Flash與ActionScript 補間動畫是利用「時間軸」,在每個時間片段上設定動畫的起點與終點,並設定圖片的移動軌跡,中間的移動過程則由播放程式自行計算,因此即使是複雜的軌跡運動,使用的圖片只有一張,下圖為時間軸與移動軌跡的基本示意: 時間軸 0 10 25 40 50 終點 Flash動畫製作的其本原理
Flash與ActionScript Flash與遊戲設計 Flash可完成遊戲設計的主因在於Action Script, Action Script可用來輔助動畫的製作,使動畫移動更具多樣性,或利用程式替Flash影片加入與使用者的互動式效果,在新版的Flash中更在Action Script中加入了物件導向的特性,使Action Script逐漸走向程式設計應用的趨勢。 Flash設計出來的畫面精美、容量小,看好於應用於網路遊戲與動畫的市場。
OpenGL
OpenGL簡介 OpenGL全名為open Graph Library ,為公開圖形庫 OpenGL是SGI公司於1992年所提出的一個製作2D與3D的圖形應用程式的API 。 是一套「計算機三維圖形」處理函式庫。 在電腦繪圖的世界裡,OpenGL就是一個以硬體為架構的軟體介面。 程式設計者在開發過程中可以利用Windows API來存取檔案,再以OpenGL API來完成即時的3D繪圖。
目前OpenGL版本為3.0版(2008年8月公布),大改版, 設計架構從「狀態」為主 「物件」為主,OpenGL 被「物件化」了 c 日期 版本 1992年7月 1.0版 1995年12月 1.1版 1999年5月 1.2.1版 2003年7月 2.1版(嵌入式版本) 2008年8月 3.0版 目前OpenGL版本為3.0版(2008年8月公布),大改版, 設計架構從「狀態」為主 「物件」為主,OpenGL 被「物件化」了
OpenGL發展史 OpenGL後來被設計成獨立於硬體與作業系統的一種顯示規範,它可以運行於各種作業系統與電腦上。 是專業圖形處理與科學計算等高階應用領域的標準圖形函式庫。 能在網路環境以客戶端和伺服器模式下工作 OpenGL透過Client/Server方式實現,當客戶端(以OpenGL標準開發的應用程序)向伺服器(OpenGL核心機制)發出命令時,由伺服器負責解釋這些命令 通常,客戶端和伺服器運行在同一台機器上,基於客戶端/伺服器的運行機制,這使用户能方便地在網路環境下使用OpenGL。
OpenGL函式說明 OpenGL分為程序式(Procedural)與非描述式(Nondescriptive)兩種繪圖API函式 非描述性:場景中有很多特效、物件、且已是程式開發者事先定義好的 指令:任何可執行程序的元素的表述 函式:程式中超過兩次以上重複使用的程式碼,可以考慮將之定義為函式,以便重覆呼叫使用,降低相同程式片段的維護成本。
OpenGL函式說明 OpenGL 的工具函式庫 降低移植至不同視窗形式系統的問題: 例如: c OpenGL 的工具函式庫 GLU(OpenGL Utility Library): 為較高階的圖形函式庫 主要功能是處理特殊矩陣運算、曲線和曲面、基本3D圖形處理等功能 協助程式設計師處理材質、投影與曲面模型 GLUT(OpenGL Utility Toolkit): 用於簡化視窗管理程式法的撰寫 不只有Microsoft Windows系統,支援視窗形式的作業系統(e.g.Mac OS、X-Window(Linux/Unix) 降低移植至不同視窗形式系統的問題 協助在各作業系統下作視窗的管理,功能包括視窗、選單的建立,滑鼠、鍵盤、搖桿的控制及簡單的3D 模型等 只要使用GLUT 就不必在乎是哪個作業系統,達到跨平台的目的。 降低移植至不同視窗形式系統的問題: 例如: Linux與Windows的開發環境不同,所以程式碼也會不同;利用VC++寫的程式在Windows上可以很順的執行,但是若要在mac OS或者Linux上執行,我們可能需要修改一堆函式以及形式
OpenGL函式說明 OpenGL提供glShadeModel()函式可在物體上著色效果,其函式結構如下: 在2D模式中,以GL_SMOOTH著色,具有平滑效果;以GL_FLAT呈現單一顏色
OpenGL函式說明 程式說明與舉例: void CreatDraw(void){ glClearColor(1.0f, 1.5f, 0.8f, 1.0); glClear(GL_COLOR_BUFFER_BIT); glShadeModel(GL_FLAT); //左邊的四邊形,以FLAT方式著色 glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 1.0f);//藍色 glVertex2f(-0.05f, 0.2f); glColor3f(1.0f, 0.0f, 0.0f);//紅色 glVertex2f(-0.05f, -0.2f); glColor3f(0.0f, 1.0f, 0.0f);//綠色 glVertex2f(-0.3f, -0.2f); glColor3f(1.0f, 0.0f, 1.0f);//紫色 glVertex2f(-0.3f, 0.2f); glEnd();
OpenGL函式說明 glShadeModel(GL_SMOOTH);//左邊的四邊形,以SMOOTH方式著色 glBegin(GL_QUADS); glColor3f(0.0f, 0.0f, 1.0f);//藍色 glVertex2f(30.0f,20.0f ); glColor3f(1.0f, 0.0f, 0.0f);//紅色 glVertex2f(30.0f, -20.0f); glColor3f(0.0f, 1.0f, 0.0f);//綠色 glVertex2f(5.0f, -20.0f); glColor3f(1.0f, 1.0f, 0.0f);//黃色 glVertex2f(5.0f, 20.0f); glEnd(); glutSwapBuffers(); }
OpenGL函式說明 執行結果:
OpenGL函式說明 OpenGL提供glShadeModel()函式可在物體上著色效果,其函式結構如下: 在3D模式中,GL_FLAT表示同一個三角形的所有位置對光線接以三角面的方法向量運算,使得面與面之間出現明顯接痕;以GL_SMOOTH則需要較長的時間計算,畫面明顯平滑許多(如下圖所示)
OpenGL函式說明 範例:「全方位3D遊戲」 使用Flat Shading,可以看到很明顯的三角形
OpenGL函式說明 範例:「全方位3D遊戲」 使用Gouraud Shading,畫面明顯平順許多
OpenGL運作原理 當撰寫OpenGL的程式,利用GLUT來產生一個供OpenGL繪圖用的視窗,取得該視窗的裝置本文(DC, Device Context)代碼,再透過OpenGL的函式來進行OpenGL的初始化。 OpenGL的主要用意是在於使用者在表現高階需求的時候,可以利用低階的OpenGL來控制。
OpenGL運作原理 圖示說明: 說明:繪圖資料讀進緩衝區(包含指令、座標點、材質資訊等) 轉 換與燈光(T&L),運算物體時計成像的幾何座標點與光影位置利用顯 像技術(Rasterization)建立影像送進記憶體(Frame Buffer),呈現 於螢幕上
OpenGL運作原理-軟體要求 通常顯示卡廠商會提供GDI(Graphics Device Interface,繪圖裝置介面)的硬體驅動程式來達成畫面輸出需要。 OpenGL的主要工作就是接受這種繪圖需求,並且將這種需求建構成一種影像,然後再將影像交給GDI處理,最後再由GDI送至繪圖顯示卡上。 OpenGL的軟體要求必須透過CPU計算,再送至GDI處理影像,再由GDI將影像送至顯示裝置,這樣才能算是一次繪圖顯像處理動作。
OpenGL運作原理-硬體要求 OpenGL的硬體處理要求是將顯像資料直接送往繪圖顯示卡上,讓顯示卡做繪圖要求所建構與顯像動作,其過程不須經過GDI軟體裝置 現在繪圖顯示卡技術提升與價格低落的情況下,幾乎每一張繪圖顯示上都有轉換與燈光(T&L)的加速功能 繪圖卡上的記憶體不斷地擴充,因此,在繪圖顯像的過程中似乎都不需要經過CPU和主記憶體的運算
DirectX
DirectX SDK簡介 DirectX(Direct eXtension,簡稱DX)是… 由微軟公司建立的多媒體編程介面 由「執行時期」(Runtime)函式庫與「軟體開發套件組」(Software Development Kit ,SDK)所組成 利用DirectX SDK開發的應用程式,要安裝 directx end-user runtime才可以正常執行。 開發時透過DirectX SDK中所提供的各種控制元件,來進行硬體的控制及處理運算。 讓Windows為作業平台的遊戲或多媒體程式獲得更高的執行效率 開發者不需為每一個廠牌的硬體設備來撰寫不同的驅動程 降低使用者安裝及設備硬體的複雜度 透過DirectX SDK提供各種控制元件進行硬體的控制與處理計算
DirectX SDK的內容表 元件名稱 用途說明 DirectX SDK由許多API函式庫及媒體相關元件組成,內容如下: DirectGraphics DirectX繪圖引擎,用來處理3D繪圖影像,利用3D指令的硬體加速特性發展強大的API函式 DirectSound 控制聲音、音效處理及提供音效處理的支援,如低延遲音、3D立體聲、協調硬體運作等 DirectInput 處理遊戲的周邊設備裝置,如搖桿、方向盤、VR手套、GamePad介面 DirectShow 利用過濾器技術來播放影片與多媒體方法 DirectPlay 輕易的開發多人連線遊戲,連線方式包含區域網路連線、數據機連線等支援各種通訊協定
DirectGraphics c 顏色鍵(colorkey):用來指定圖片的透空色彩。由Quester主導開發, 由Blueidea.com站點軟件開發工作組測試和發行的一款具人性化、 科學化的交互式配色輔助工具。能使用戶方便地控制色彩傾向、 生成配色方案,能方便地將配色方案輸出為網頁文件和*.AI格式文件 DirectGraphics是DirectX9的內建套件之一,它負責處理2D與3D的影像運算,並支援多種硬體加速功能。 讓程式開發人員不需考慮對硬體的驅動與相容性問題,即可直接進行各種設定與控制工作 DirectDraw在使用上與Windows GDI相似且簡單易學,使用者可以利用顏色鍵作去透空處理。 DirectDraw除了簡單外,要做出相當炫的特效,還是得自己動手寫。 在3D硬體加速卡如此普級化的今天,運用3D功能作出超炫的畫面也是輕而易舉。 未透空顯示 透空顯示colorkey為白色
DirectSound-介紹 DirectSound套件則比MCI功能更為複雜與多元與複雜,是一種用來處理聲音的API函式。 音樂 是由多種聲音所組成的 如各種樂器 人聲等等 而音樂的輸入與輸出不可避免的 會因處理的過程產生延遲 而低延遲音 就是盡可能的降低這類的影響
DirectSound-介紹 c 對於音效播放區域分為數個物件成員,較具體的成員有:音效卡(DirectSound)、2D緩衝區(DirectSoundBuffer) 、3D緩衝區(DirectSound3DBuffer)與3D空間傾聽者(DirectSound3DListener) 若要播放音效,電腦上需安裝音效卡,而DirectSound將音效卡當作一個物件,一個物件處理一組音效運算,即使真正的音效卡沒有硬體功能(如音效合成器),音效卡物件能自行模擬 在多工作業系統(Multitasking)中,會使用到音效卡的程式並不只有遊戲本身,因此在只有一張音效卡情況下,過去可能必須親自處理音效卡與其他程式共用的協調問題,不過使用DirectSound就不需擔心這問題,因為它會自行處理音效卡的共用協調問 緩衝區(Buffer):為暫時置放輸出或輸入資料的記憶體, 緩衝器內資料自儲存設備(如硬體)來,放置在緩衝器中, 須待機送至CPU或其他運算設備。 多工(multitasking):一個系統可以同時運作多個 不同的軟體或是系統服務,可以充分使用系統資源 多人多工:指『同一時間』允許『多人』同時可執行多項工作(即程式),例網路作業系統(NOS)。 如:UNIX、Windows NT 、LINUX、NOVELL/NETWARE等 單人多工作業系統是指電腦在同一時間內只能有一個使用者, 但能同時執行多項工作的作業系統, 如 Windows 3.1 、 Windows 95 、 Windows 98 、 OS2。
DirectSound-介紹 音效檔案在播放音效實需載入記憶體,其記憶體位置於音效卡或主記憶體上;在DirectSound只要將音效檔案載入緩衝區物件,緩衝區物件同等於音效卡物件上的記憶體,且DirectSound將自行判斷記憶體位置 除了基本的2D音效,DirectSound提供3D音效的模擬功能,3D緩衝區用來存放3D音效檔案,將音效卡物件具體化為實體音效卡
DirectSound-音效緩衝區 DirectSound緩衝區是用來載入音效檔案,其中包含2D與3D緩衝區,一個緩衝區只用來載入一個音效檔案;也可將一個緩衝區視為一個音效檔案,2D緩衝區可進行平面的音效播放,3D緩衝區可擁有計算與控制3D音效的功能 除了單一音效檔案功能,它也提供多個音效檔同時播放的功能,藉此可將數個音效檔案適當的加以組合並同時間播放,已達到多種不同的播放效果變化
DirectSound-音效緩衝區 播放3D音效有幾種可能的移動: 音源不動,傾聽者移動 傾聽者不動,音源移動 音源與傾聽者一起移動 3D緩衝區不從事音效的播放與控制,用來設定位置與聲音錐,其操作播放需交回至2D緩衝區物件去執行 在3D音效播放時,位於音源的正面所聽到的聲音較大,而位於音源後方所聽到的聲音較小
DirectSound-聲音錐 當傾聽者位於聲音錐內時,所聽到的聲音會比較清楚,如果傾聽者位於聲音錐外,所聽到的聲音會比較小聲。 而聲音也具有一定的擴散性,我們可以使用聲音錐的角度來設定。 在DirectSound的設定中,還可以設定內層聲音錐與外層聲音錐,內層聲音錐所聽到的聲音會比外層聲音錐所聽到的聲音來得大,外層聲音錐也可以設定它的音量。
DirectSound-聲音錐 聲音錐外 聲音錐內 聲音錐示意圖 θ
DirectInput簡介 DirectInput是用來處理遊戲的一些週邊設備裝置,例如搖桿、GamePad介面、方向盤、VR手套、力回饋等週邊裝置。 利用DirectInput不需透過作業系統直接對裝置進行存取行為,立即回應目前硬體狀況,而非等待Windows傳送過來的訊息 DirectInput元件對於操作裝置是以「軸」與「按鈕」來定義,它將操作裝置分為三類:「鍵盤」、「滑鼠」與「搖桿」。
DirectInput-鍵盤 它屬於沒有軸的操作裝置,而鍵盤基本上具有101個以上的按鍵,所以鍵盤在DirectInput的定義上,就屬於「無軸」、「多按鈕」的操作裝置。 使用DirectInput來操作鍵盤比使用Windows事件處理來操作鍵盤擁有更多的優點。 由於DirectX的成員都可以直接存取目的裝置,而無需透過Windows的訊息;所以使用DirectInput直接存取鍵盤裝置,會比使用Windows事件處理來得反應快速。
DirectInput-滑鼠 滑鼠是利用軌跡球的滾動或是光線的相對位移(指光學鼠)來決定其移動量。 所以滑鼠的操作具有方向性,但是滑鼠的移動並沒有原點依據,它所採用的是「相對軸」。 在DirectInput的定義中,滑鼠屬於「多按鈕」、使用「相對軸」的操作裝置
DirectInput-搖桿 在DirectInput中對搖桿的定義為「多軸」與「多按鈕」的操作裝置。 無論該搖桿長的多怪異,操作方式多複雜,都將其歸類於軸與按鈕的操作。 在DirectInput中定義有兩種搖桿類型,一種為6個軸、32個按鈕的一般搖桿,一種為24軸、128個按鈕的新型搖桿。
DirectInputer進行操作裝置管理方式 直接取得裝置的狀態 設定緩衝區 優點: 即時資料可讀取裝置的即時資訊 缺點: 程式忙碌時可能讀取到錯誤的操作或遺漏訊息 訊息會儲存在緩衝區,操作訊息不會遺誤 必須自行處理緩衝區 緩衝區過大 導致操作有延遲效應 緩衝區過小 操作訊息被遺漏
DirectShow c DirectShow是DirectX中負責多媒體檔案播放的主要元件,它不僅使用簡單,更支援MPEG、AVI、MOV、MIDI、MP2與MP3等多媒體格式。 DirectShow的運作方式不同於DirectSound與DirectMusic元件,而是透過「過濾器」(Filter)技術來進行媒體檔案的播放作業。 「過濾器技術原理」:利用資料流(Data streams)將媒體檔案輸入到過濾器中,經過對應解壓縮方式操作後,再以資料流方式將處理過後的資料輸出 串流(Streaming)是指將一連串的影像壓縮後,經過網際網路分段傳送資料,在網路上即時傳輸影音以供觀賞的一種技術與過程;串流傳輸可傳送現場影音或預存於伺服器上的影片,當觀看者在收看這些影音檔時,影音資料在送達觀賞者的電腦後立即由特定播放軟體播放 (如 Windows Media Player, Real Player, 或 QuickTime Player)
DirectShow-過濾器 圖示說明: MPEG檔案 說明: DirectShow過濾器 解壓縮作業 資料流 輸入 輸出
DirectShow-過濾器 DirectShow元件可有多組過濾器,以負責不同媒體格式檔的運算處理,由下圖所示來介紹: 說明: 媒體 檔案 第一組 DirectShow過濾器 輸出資料流 第二組 說明: 過濾器可以相互組合使用,也就是可以將第一個過濾器的運算結果輸出資料流,導向第二個過濾器做進一步處理
DirectPlay DirectPlay是爲了滿足近來流行的網路遊戲而開發的API,此外也提供網路對談的功能,以及保密的措施。 如果使用DirectPlay,便可以撰寫一套支援IPX、TCP/IP、序列、數據機通訊,以及其它不同網路通訊協定的程式碼,否則就必須自行開發這些不同且繁雜瑣碎的通訊協定程式碼。
補充 DirectX 和OpenGL支援度的差別在於: DirectX 是微軟開發的所以只提供在Microsoft的作業系統。 DirectX 比較普及,因為所有灌有WINDOWS的電腦都有內建支援
Thank You !