24 Babylonjs入門進階 如何使用Observables

對於很多人來說,只是創建了Babylon.js項目相關的gui,其實還需要場景的Observables,特別是scene.onPointerObservable(獲取場景觸摸事件)。

介紹

Babylon.js提供了很多事件(比如scene.beforeRender),在v2.4之前沒有統一的方法處理它們。從v2.4開始,我們介紹了一種新模式(不會破壞向後兼容性):Observables
它分爲兩部分:ObservableObserver。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的鏈接。

添加Observer到Observable

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章