對於很多人來說,只是創建了Babylon.js項目相關的gui,其實還需要場景的Observables
,特別是scene.onPointerObservable
(獲取場景觸摸事件)。
介紹
Babylon.js提供了很多事件(比如scene.beforeRender
),在v2.4之前沒有統一的方法處理它們。從v2.4開始,我們介紹了一種新模式(不會破壞向後兼容性):Observables
。
它分爲兩部分:Observable
和Observer
。Observable是給定的事件(例如像beforeRender)的對象屬性。用戶想要觸發此類事件的話需要往相應的Observable
內註冊一個Observer
。然後,Observable的任務是在適當的時候觸發執行所有的Observer
。
實現者將使用Observable
創建一個屬性,該屬性將觸發所有已經註冊的Observer
。觸發後,將給定的數據從Observable
傳遞給Observer
。
雖然可以創建自己的Observable
(下面是一個簡單的例子),但通常都是將Observer添加到Babylon.js提供的Observable
中。對於那些想要深入研究的人來說,API中有更多的細節。
- 官方示例,簡單的自定義Observable
Observable
- onXChange-被添加到主球體中。兩個其它球體添加到了主球體的Observable
中,當主球體的x軸位置發生變化時,它們也會跟着變化。
Observable 的屬性和方法
以下的方法都可用:
- add():添加一個Observer
- addOnce():添加一個Observer,它將執行一次然後刪除
- remove():刪除之前註冊的Observer
- removeCallback():與上面方法相同,但傳入的是回調函數而不是Observer實例
- notifyObservers():用於觸發所有已註冊的Observer
- notifyObserversWithPromise():調用它將執行每個回調,期望它是一個promise或返回一個值。如果鏈中的任何一個函數失敗,則promise將失敗並且執行將不會繼續。
- hasObservers:如果至少註冊了一個Observer,則返回true的屬性
- hasSpecificMask(mask):如果向此掩碼註冊了至少一個Observer,則返回true的函數
- clear():刪除所有的 Observer
- clone():只是克隆Observable對象而不是已註冊的Observers
許多Babylon.js對象都有一系列可用的Observable。以下是來自文檔搜索工具的結果列表,其中包含指向API的鏈接。