HGE 系列教材(6) 程式流程與細節

2021-04-16 23:44:49 字數 2566 閱讀 1200

hge 的一些細節,通過原始碼可以更加清楚的了解,通過讀原始碼,可以更加高效的使用 hge engine。

必要的第一步:

help classes 層建立於 core functions 層之上,這並不意味著使用者只需要關心 help classes 而忽略 core functions,因此我們需要獲得乙個 hge 指標,來使用 core functions 的函式:

<1> 獲取 hge 指標:

hge* phge = pgecreate(hge_version);

<2> 釋放 hge 指標:

使用之後,需要釋放 hge 指標。

phge->release();

create 和 release 過程使用了引用計數,也就是說,一般來看,除了第一次的 create 呼叫之外幾乎不消耗cpu時間和資源,每呼叫一次 create 函式,引用計數器就加一,只有在第一次呼叫的時候才會真正的分配空間,呼叫 release 會使得引用計數器減一,當它為 0 的時候,才真正是釋放資源。因此以下**是可用的:

while(true)

hge* phge = pgecreate(hge_version);   // 確保不是第一次呼叫 pgecreate 函式,因為如果是第一次呼叫,會分配記憶體。

// ... do something

phge->release();

此外,要成對的呼叫 pgecreate 和 release 函式,每次呼叫 release 之後,呼叫它的指標將被賦值為0,例如:

hge* phge = hgecreate(hge_version);

phge->release();

phge->release(); // error: phge == 0

另外,phge->release 會呼叫 phge->system_shutdown();

必要的第二步:

初始化: phge->system_initiate();

初始化語句放在 windows 入口函式中,這個函式將按順序完成

1)視窗類的註冊

2)建立視窗

3)初始化子系統

4)顯示乙個 hge 的 logo(這個東西在 hge 裡面被稱之為 hge splash)

必要的第三步:

呼叫: phge->system_start();

呼叫了 system_start 的目的是開始訊息迴圈,見必要的第二步**

phge->system_start 和 phge->system_shutdown 是成對出現的,處於某些原因,即使我們知道 phge->release 會呼叫 system_shutdown 函式,我們還是應該去顯示的呼叫 system_shutdown 函式。system_shutdown 相比 release 要安全,我們可以這樣呼叫,而不會出錯:

phge->system_start();

// ... something

phge->system_shutdown();

phge->system_shutdown(); // ok

不論如何,create 和 release 成對呼叫,start 和 shutdown 成對呼叫,那麼就不會有問題出現。

還有什麼是需要的?

system_setstate 函式

常常需要設定視窗大小或者是設定為全屏模式,需要設定是否使用聲音等,這一系列操作被稱之為設定系統狀態,統一通過呼叫 phge->system_setstate 函式來完成,最為關鍵的是設定幀函式,呼叫了 phge->system_start 之後,會在繪製每幀影象時呼叫幀函式。

phge->system_setstate(***, ***) 通常可以在如何地方,如何情況下呼叫,不要認為它們只能在 phge->system_initiate 之前呼叫

system_setstate 函式的第乙個引數表示狀態,在內部實現時,它是 f** 的狀態,而第二個引數表示值,通過這個函式,可以繫結狀態和相關的值

補充一下,幀函式必須是乙個全域性函式,而不能是乙個類的成員函式,並且幀函式的原型必須是:

bool funname(void);

慣用法:

我們通常會在程式初始化之前設定狀態,即在 system_initiate 呼叫之前,例如:

int winapi winmain( hinstance hinstance,

hinstance hprevinstance,

lpstr lpcmdline,

int nshowcmd)

{phge->system_setstate(hge_framefunc, framefunc);

phge->system_setstate(hge_windowed, true);

phge->system_setstate(hge_usesound, false);

phge->system_setstate(hge_title, "hge");

phge->system_setstate(hge_showsplash, false); // 用於去除 logo

REDIS系列教材 (二) 執行

步驟 1 執行位置 把redis解壓在了d software下 步驟 2 啟動服務端 通過win r,cmd 執行命令列 然後輸入如下指令 這樣就啟動了服務端 步驟 3 啟動客戶端 通過win r,cmd 執行命令列 然後輸入如下指令 這樣就會如圖所示通過客戶端訪問 redis 伺服器 步驟 4 簡...

HGE系列之二 更上層樓

hge 系列之二 更上層樓 上次頗為感性的描述了一番 hge的輪廓,並給出了乙個世界上最簡單的 hge示例程式,不知讀過的人有了怎樣的認識,如果你說一點感覺都沒有的話 哦,好吧,在此我再重述一番要點便是 1.hge 是一款支援硬體加速的 2d遊戲引擎。2.hge 的有以下優點 l由於 hge構建於 ...

學習經濟學教材系列

現在清華大學本科經濟專業用的教材如下 經濟學原理 經濟學原理 曼昆 經濟思想史 經濟思想史 斯坦利 l 布魯,蘭迪 r 格蘭特 中級巨集觀經濟學 macroeconomics stephen d.williamson 中級微觀經濟學 microeconomics robert s.pindyck,d...