获取追踪状态

在追踪器使用过程中,开发者往往会希望实时监测追踪状态,包括追踪中、追踪到、出错等,并进行相应的处理。微信小程序提供了两个事件来实现这个需求,其中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的初始状态,比如在ARSystemar-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;
  });
}