在标记检测 A 帧 & Ar.js 上播放一次音频
Play audio ONCE on marker detection A-frame & Ar.js
当使用 A 帧和 AR.JS 库检测到标记时,我尝试只播放一次声音。
我正在尝试下面的代码行,但声音播放不确定。
<a-scene embedded arjs='sourceType: webcam; debugUIEnabled: false;';>
<a-assets>
<audio id="sound" src="audio.mp3" preload="auto"></audio>
</a-assets>
<a-marker preset="hiro">
<a-entity id="examplemodel" gltf-model="./models/Example.glb" soundhandler></a-entity>
</a-marker>
<a-entity sound="src: #sound" autoplay="false"></a-entity>
<a-entity camera></a-entity>
</a-scene>
<script>
AFRAME.registerComponent('soundhandler', {
tick: function () {
var entity = document.querySelector('[sound]');
if (document.querySelector('a-marker').object3D.visible == true) {
entity.components.sound.playSound();
} else {
entity.components.sound.pauseSound();
}
}
});
</script>
当我为 init 更改 tick 时,我得到了这个错误:
Uncaught TypeError: Cannot read property 'playSound' of undefined
你能给我一些解决这个问题的想法吗?
它不确定地播放,因为一旦它可见 - 在每个渲染循环中调用 playSound()
。
如果您添加一个简单的切换检查 - 您将获得“每次可见一次”的结果:
tick: function() {
// marker is the object3D of marker
if (marker.visible && !this.markervisible) {
// do your stuff here once per visible
this.markervisible = true;
} else if (!marker.visible) {
this.markervisible = false;
}
}
看看here
当使用 A 帧和 AR.JS 库检测到标记时,我尝试只播放一次声音。
我正在尝试下面的代码行,但声音播放不确定。
<a-scene embedded arjs='sourceType: webcam; debugUIEnabled: false;';>
<a-assets>
<audio id="sound" src="audio.mp3" preload="auto"></audio>
</a-assets>
<a-marker preset="hiro">
<a-entity id="examplemodel" gltf-model="./models/Example.glb" soundhandler></a-entity>
</a-marker>
<a-entity sound="src: #sound" autoplay="false"></a-entity>
<a-entity camera></a-entity>
</a-scene>
<script>
AFRAME.registerComponent('soundhandler', {
tick: function () {
var entity = document.querySelector('[sound]');
if (document.querySelector('a-marker').object3D.visible == true) {
entity.components.sound.playSound();
} else {
entity.components.sound.pauseSound();
}
}
});
</script>
当我为 init 更改 tick 时,我得到了这个错误:
Uncaught TypeError: Cannot read property 'playSound' of undefined
你能给我一些解决这个问题的想法吗?
它不确定地播放,因为一旦它可见 - 在每个渲染循环中调用 playSound()
。
如果您添加一个简单的切换检查 - 您将获得“每次可见一次”的结果:
tick: function() {
// marker is the object3D of marker
if (marker.visible && !this.markervisible) {
// do your stuff here once per visible
this.markervisible = true;
} else if (!marker.visible) {
this.markervisible = false;
}
}
看看here