# 場(chǎng)景
場(chǎng)景Scene是一種特殊的元素,對(duì)于所有的xr-frame小程序組件,其最外層必須有一個(gè)xr-scene標(biāo)簽作為根元素,并且組件內(nèi)只能有一個(gè),以此作為整個(gè)組件的基礎(chǔ)。
和一般僅用于組合的元素不同,場(chǎng)景有以下幾個(gè)特別之處:
- 其下掛載的組件都是名為系統(tǒng)
System的特殊組件,來驅(qū)動(dòng)邏輯和渲染。 - 增加了一些方法,用于創(chuàng)建資源、查詢等等。
- 每個(gè)元素、組件、資源都是屬于當(dāng)前被包在的
xr-scene標(biāo)簽對(duì)應(yīng)的元素中的。
在我們編寫組件時(shí),常常用到的那個(gè)this.scene,其實(shí)就是這個(gè)元素。
# 用途
一般我們需要用到的是場(chǎng)景的創(chuàng)建和查詢能力。
創(chuàng)建資源可以使用類似:
// 脫離于資源加載工作流,創(chuàng)建屬于這個(gè)場(chǎng)景的紋理資源
const texture = scene.createTexture(options);
// 直接創(chuàng)建一個(gè)元素,但注意要和`Shadow元素`一起使用
const el = scene.createElement(xrFrameSystem.XRNode);
的方式,更多的創(chuàng)建可見API文檔。
同樣在API文檔中我們還可以看到有一些查詢接口,比如上一節(jié)提到的scene.getElementById,以及scene.width這種獲取畫布信息的,scene.assets這種獲取系統(tǒng)實(shí)例引用的,開發(fā)者可以按需使用。
# 獲取場(chǎng)景實(shí)例
要使用場(chǎng)景需要先獲取實(shí)例,在組件、加載器等中,我們可以直接用this.scene獲取,而在用戶小程序腳本中,則需要通過事件:
<xr-scene bind:ready="handleReady">
......
</xr-scene>
// 小程序腳本中綁定的事件
handleReady({detail}) {
const scene = detail.value;
}
# 事件
場(chǎng)景元素提供了以下事件:
| 事件 | 參數(shù) | 立即 | wxml | 時(shí)機(jī) |
|---|---|---|---|---|
| ready | 無 | 是 | 是 | 場(chǎng)景第一次解析完畢 |
| tick | 數(shù)字,delta(ms) | 是 | 是 | 一幀驅(qū)動(dòng)開始 |
| pause | 無 | 是 | 是 | 場(chǎng)景暫停,一般是是壓后臺(tái) |
| resume | 無 | 是 | 是 | 場(chǎng)景恢復(fù),一般是從后臺(tái)喚醒 |