在追踪器使用过程中,开发者往往会希望实时监测追踪状态,包括追踪中、追踪到、出错等,并进行相应的处理。微信小程序提供了两个事件来实现这个需求,其中ar-tracker-switch比较简单,仅仅在追踪到/追踪中切换,而ar-tracker-state则提供了更加详尽的信息:
ar-tracker-state事件从基础库2.29.1开始支持。
<xr-ar-tracker id="ar-tracker" mode="Marker" src="{{markerImg}}" bind:ar-tracker-state="handleARTrackerState">
<xr-gltf model="gltf" />
</xr-ar-tracker>
绑定后编写逻辑:
handleARTrackerState({detail}) {
// 事件的值即为`ARTracker`实例
const tracker = detail.value;
// 获取当前状态和错误信息
const {state, errorMessage} = tracker;
}
以上state的类型为EARTrackerState,当状态为EARTrackerState.Error时,可以从errorMessage获取详细错误信息。
但这里也要注意,由于某些使用时序的问题,很多场景下开发者需要自己去确定ARTracker的初始状态,比如在ARSystem的ar-ready事件中通过id获取ARTracker的引用,然后判定初始状态:
handleARReady({detail}) {
const xrFrameSystem = wx.getXrFrameSystem();
const tracker = this.scene.getElementById('ar-tracker').getComponent(xrFrameSystem.ARTracker);
// 初始状态
const {state, errorMessage} = tracker;
// 绑定事件
tracker.el.event.add('ar-tracker-state', tracker => {
const {state, errorMessage} = tracker;
});
}