我是編程新手,我一直在檢查很多遊戲編碼教程。我注意到,他們中的大多數人使用自定義事件來觸發方法,而不是直接調用方法。爲什麼使用自定義事件而不是直接方法調用?
這種做法背後的原因是什麼?他們爲什麼不調用這個方法?
例如:
我們有兩個目標:A
和B
。當X
條件被觸發時,A
具有方法A.methodA()
,B
需要使用。
爲什麼執行:
B
調度事件以A
告訴A
運行A.methodA()
相反的:
B
使用A.methodA()
我是編程新手,我一直在檢查很多遊戲編碼教程。我注意到,他們中的大多數人使用自定義事件來觸發方法,而不是直接調用方法。爲什麼使用自定義事件而不是直接方法調用?
這種做法背後的原因是什麼?他們爲什麼不調用這個方法?
例如:
我們有兩個目標:A
和B
。當X
條件被觸發時,A
具有方法A.methodA()
,B
需要使用。
爲什麼執行:
B
調度事件以A
告訴A
運行A.methodA()
相反的:
B
使用A.methodA()
主要原因是利益分離。當使用事件時,A類不需要知道B類的存在(反之亦然)。
到這方面的一些好處是:
+1;我還會補充說,事件是一個對象與父對象通信的正確方式。方法調用或公共屬性是父母與孩子溝通的正確方式。 – JeffryHouser
@ www.Flextras.com - 同意,特別是如果兒童班與不同的家長班一起使用。 – BadFeelingAboutThis
通常在更大的應用程序中使用事件將有助於抽象化所有事物。當你有15個以上的課程,並且他們都將事件分派給控制器時,通過查看代碼的所有不同部分來跟蹤功能,瞭解發生的事情要容易得多。使用回調開始創建意大利麪代碼。
但是,直接函數調用將比事件執行得更快。
就我個人而言,我使用自定義事件只是爲了方便使用。當有事情發生時(例如動畫完成或下載發生錯誤),我可以讓一個類派發一個事件,並且任何數量的其他類都可以根據該事件運行任意數量的其他函數。另外,我爲可重用性編碼。每個類的目標是完全獨立的,因此它可以在任何項目中運行而不需要其他包。因此,不是讓一個類調用另一個類的方法,而是從第二個類偵聽的第一個類派發一個事件,然後運行該方法。然後,當我需要第一個課程用於另一個項目時,我可以複製/粘貼它,而不必修改它並且不會丟失任何功能。
編輯: 另外,值得注意的是,有時候人們會根據你的描述來解決事件參數傳遞的問題。
假設您在舞臺上有一個按鈕,並且您需要能夠點擊它,但是您還需要能夠手動調用該方法。有些人沒有意識到你可以通過一個空的事件,只有一個方法。或者你可以將其設置爲空默認參數,見下圖:
private function onClickHandler(e:MouseEvent = null):void{
//as long as you never reference "e" within this method, this method can be used both for MouseEvent listeners and manually calling it elsewhere in the code
}
這種技術可以幫助避免的事件處理程序,只有調用另一個方法而已。在編程的這一點上,我寫的每一個AS3事件處理程序都會默認將event參數設置爲null。它只是讓事情更容易。
而且還要注意使用回調方法允許你參數通過自定義事件模型,而不是直接傳遞給它。
我建立了我自己的,非常簡化的事件調度系統。 AS Event模型功能非常強大,但在99%的情況下,您不需要該功能。將參數作爲事件觸發的簡單回調已經足夠了。您仍然可以保留事件模型的多功能性,但不需要編寫太多的代碼行,比如說一個簡單的按鈕。 我可以設置這樣一個簡單的事件:
Buttonizer.autoButton(_buttQuit, this, "onPress");
public function onPressQuit(c:Sprite) {
// Execution goes here
}
你可以建立自己的事件模型,它會讓生活變得簡單,並且代碼簡潔得多。
好吧,每當你需要觸發某個方法時,都會引用這個參考,這會讓垃圾收集器的生活變得更簡單=)(他會減少更多的擔心)。 – Ziul