引擎這個詞在程式設計中出現越來越多,比如遊戲引擎,爬蟲引擎,規則引擎。引擎這個最初在汽車裡面代表發動機的詞,到底是指什麼意思,而引擎在不同程式設計的語境中具體又代表了什麼,本文就是為了解釋這些疑問而寫的。
在遊戲中,引擎被抽象為控制所有遊戲功能的主程式。那麼,遊戲引擎如何控制遊戲功能呢?想象我們再玩乙個網路遊戲,首先有乙個遊戲圖,然後我們輸入一些操作,控制人物的行為,人物在遊戲中與遊戲中的物件進行互動,從而產生一種新的狀態。
如果把遊戲中所有的物件看作狀態機,遊戲引擎就是改變狀態的規則,它定義了物件(狀態機)在什麼情況下應該轉變為另一種狀態並且完成這個狀態的轉換。
汽車,開始是靜止狀態。引擎,定義了當打火的時候汽車發動,當踩油門的時候,引擎會讓汽車進行加速。引擎是改變狀態的動力,它定義了狀態如何改變並且將這種改變實現。在物理世界中,引擎通過複雜的物理過程實現狀態的改變;在**世界中,引擎通過**的執行和呼叫實現程式狀態的改變。
而引擎在呼叫的時候,如果資源很少直接進行呼叫,不會出什麼問題(甚至不需要所謂引擎的概念,直接執行乙個所有**的在main函式裡面的程式即可)。當需要呼叫的資源/函式很多的時候,引擎還承擔起排程的功能,資源之間相互具有依賴性,先執行什麼,再執行什麼,這個由引擎來決定。拿汽車舉例,發動汽車氣缸內的物理過程順序不能錯,否則就會出現不同的結果。物理過程,可以理解為使引擎內部的自然規則,在實際**中,我們可以自定義自己的規則。
還有一種理解是,引擎就是為了實現某個功能已經封裝好的庫。有人也許會問,這和api有什麼區別?api是提供呼叫封裝好的庫的介面,乙個引擎為了完成某個功能,必然會呼叫已經實現的函式**的介面,並且這種呼叫是基於引擎功能而制定的呼叫組合。引擎這個概念,其實也就是抽象,在更高乙個層面看**,將森林簡化成一棵樹。
從狀態的角度講,引擎是為了實現狀態的轉換。而狀態的轉換,需要定義規則。即在什麼情況下作出什麼反應。
從功能的角度講,引擎是封裝了**/函式庫,通過呼叫**/函式庫的介面來實現特定的功能。
從抽象的角度講,引擎簡化了我們看問題的視角。使得我們通過引擎就可以對程式的功能狀態進行改變,從而實現豐富的內容和功能。
什麼是儲存引擎?
關聯式資料庫表是用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的 類似於excel的電子 的形式。有的表簡單,有的表複雜,有的表根本不用來儲存任何長期的資料,有的表讀取時非常快,但是插入資料時去很差。而我們在實際開發過程中,就可能需要各種各樣的表,不同的表,就意味著儲存不同型別的資料,資料...
什麼是3D引擎
3d引擎作為乙個名詞已經存在了很多年,但即使是一些專業的引擎設計師,也很難就它的定義達成乙個共識。通常來說,3d引擎作為一種底層工具支援著高層的圖形軟體開發。你可以把它看成是對3d api的封裝,對一些圖形通用演算法的封裝,對一些底層工具的封裝。我無法準確的定義3d引擎的含義和作用,因為針對不同的使...
什麼是3D引擎
3d引擎作為乙個名詞已經存在了很多年,但即使是一些專業的引擎設計師,也很難就它的定義達成乙個共識。通常來說,3d引擎作為一種底層工具支援著高層的圖形軟體開發。你可以把它看成是對3d api的封裝,對一些圖形通用演算法的封裝,對一些底層工具的封裝。我無法準確的定義3d引擎的含義和作用,因為針對不同的使...