我如何使用 React VR 创建凝视按钮?
How could I create gaze buttons using React VR?
我正在使用 React VR 编写一个 VR 应用程序,并制作带有进度条的注视按钮 (或其他) 以向用户显示他必须观看该按钮多长时间.我该怎么做?
我正在考虑使用这个伪代码(可能这段代码中有一些错误):
constructor(props) {
super(props);
this.state = {
watchTime: 3,
progress: 0,
watching: true
};
}
render() {
return (
<VrButton onEnter={ () => this.animateProgress() }
onExit={ () => this.stopProgress() }
onClick={ ()=> this.click() }></VrButton>
);
}
animateProgress() {
this.setState({watching: true});
while (this.state.watchTime >== this.state.progress && this.state.watching === true) {
// after a timeout of one second add 1 to `this.state.progress`
}
this.click();
}
stopProgress() {
this.setState({
progress: 0,
watching: false
});
}
click() {
// Handels the click event
}
有更简单的方法吗?
您需要向项目中添加一些内容。
使用
安装 simple raycaster
npm install --save simple-raycaster
在 vr/client.js
内添加此代码:
import { VRInstance } from "react-vr-web";
import * as SimpleRaycaster from "simple-raycaster";
function init(bundle, parent, options) {
const vr = new VRInstance(bundle, "librarytests", parent, {
raycasters: [
SimpleRaycaster // Add SimpleRaycaster to the options
],
cursorVisibility: "auto", // Add cursorVisibility
...options
});
vr.start();
return vr;
}
window.ReactVR = { init };
在index.vr.js
里面使用这个代码:
constructor(props) {
super(props);
this.click = this.click.bind(this); // make sure this.click is in the right context when the timeout is called
}
render() {
return (
<VrButton onEnter={ () => this.animateProgress() }
onExit={ () => this.stopProgress() }
onClick={ ()=> this.click() }></VrButton>
);
}
animateProgress() {
this.timeout = this.setTimeout(this.click, 1000); // or however many milliseconds you want to wait
// begin animation
}
stopProgress() {
clearTimeout(this.timeout);
this.timeout = null;
// end animation
}
click() {
// ...
}
我正在使用 React VR 编写一个 VR 应用程序,并制作带有进度条的注视按钮 (或其他) 以向用户显示他必须观看该按钮多长时间.我该怎么做?
我正在考虑使用这个伪代码(可能这段代码中有一些错误):
constructor(props) {
super(props);
this.state = {
watchTime: 3,
progress: 0,
watching: true
};
}
render() {
return (
<VrButton onEnter={ () => this.animateProgress() }
onExit={ () => this.stopProgress() }
onClick={ ()=> this.click() }></VrButton>
);
}
animateProgress() {
this.setState({watching: true});
while (this.state.watchTime >== this.state.progress && this.state.watching === true) {
// after a timeout of one second add 1 to `this.state.progress`
}
this.click();
}
stopProgress() {
this.setState({
progress: 0,
watching: false
});
}
click() {
// Handels the click event
}
有更简单的方法吗?
您需要向项目中添加一些内容。
使用
安装 simple raycasternpm install --save simple-raycaster
在
vr/client.js
内添加此代码:import { VRInstance } from "react-vr-web"; import * as SimpleRaycaster from "simple-raycaster"; function init(bundle, parent, options) { const vr = new VRInstance(bundle, "librarytests", parent, { raycasters: [ SimpleRaycaster // Add SimpleRaycaster to the options ], cursorVisibility: "auto", // Add cursorVisibility ...options }); vr.start(); return vr; } window.ReactVR = { init };
在
index.vr.js
里面使用这个代码:constructor(props) { super(props); this.click = this.click.bind(this); // make sure this.click is in the right context when the timeout is called } render() { return ( <VrButton onEnter={ () => this.animateProgress() } onExit={ () => this.stopProgress() } onClick={ ()=> this.click() }></VrButton> ); } animateProgress() { this.timeout = this.setTimeout(this.click, 1000); // or however many milliseconds you want to wait // begin animation } stopProgress() { clearTimeout(this.timeout); this.timeout = null; // end animation } click() { // ... }