電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
多型與虛擬函式之隨口亂說

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 板主碎碎唸
上一篇主題 :: 下一篇主題  
發表人 內容
yag
Site Admin


註冊時間: 2007-05-02
文章: 684

2639.56 果凍幣

發表發表於: 2011-8-29, PM 6:46 星期一    文章主題: 多型與虛擬函式之隨口亂說 引言回覆

類別的三大精神:封裝、繼承、多型,其中多型的基礎就是虛擬函式
不過這也沒什麼難的,實際上類別方法最前面加個virtual就是虛擬函式了..
你要先了解什麼是多型
多型,以實際面來說,就是父類別的指標指向子類別的空間,以抽像面來說,就是以介面指向實體

假設有父類別A,子類別B、C
A *a = new B;
這就是多型的實作
以抽象方式來說,有父類別「鳥類」,子類別「鴨子」、「烏鴉」
鳥類 *bird = new 鴨子();

虛擬函式就是用在這個地方,比如說,烏類都會「叫」,所以「烏類」中就有個方法是「virtual void 叫();」
子類別「鴨子」跟「烏鴉」分別實作「叫」這個函式
那麼用

鳥類 *bird = new 鴨子();
bird->叫();

時,可能會輸出「呱呱」

烏類 *bird = new 烏鴉();
bird->叫();

可能會輸出「嘎嘎」

這麼一來,我們就可以有同樣的邏輯可以follow
比如說玩家可以養一隻寵物,玩家類別中我們就可以給個成員屬性「鳥類 *bird;」
當玩家的寵物是鴨子,我們就new 鴨子給他
寵物是烏鴉,我們就new 烏鴉給他
當寵物要叫時,我們只要呼叫
bird->叫();
就可以得到我們要的結果

可以把介面(父類別)看成實體(子類別)的一種容器,虛擬函式就是其操作方式
玩家如果換寵物,就
delete bird;
然後重新new一個新的子類別就行了

遊戲中常見到的多型,還有像場景的切換
比如說一個像雷電的遊戲有開頭畫面場景、遊戲場景、得分排行榜場景…等等
這些場景的共通點一般就是update跟render,update是更新資料,render是繪製
那麼我們就可以做個父類別叫Scene,兩個虛擬函式分別是update跟render
然後以
Scene *s = new 開頭畫面場景();
來開始遊戲,玩家如果按了開始鍵,我們就
delete s;
s = new 遊戲場景();

來進入遊戲
而遊戲主迴圈就是跑
s->update();
s->render();

這樣每個場景就會自動更新畫面資訊了
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 板主碎碎唸 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作