我现在正在做某件事,但无法让它发挥作用。我有一个three.js带有控件 (THREE.OrbitControls
) 的球体(桌面上为“HTML1”)。
这在计算机和平板电脑上都运行良好。我想做的是通过 iPad 控制该球体,因此我在 iPad 上运行的 HTML 文件(“HTML2”)上加载了一个空白场景。那个空白的 two.js 球体还具有控制功能,我想将其发送到服务器( socket.io ),该服务器应该将它们发送到桌面球体(“HTML1”)。
我的服务器:服务器正在从平板电脑获取数据,但未发送(或台式机未接收)
io.on('connection', function(socket){
socket.on('cameraControls', function(controls){
socket.emit('sendControls', function(controls) {
console.log('Controls');
});
});
console.log('a user connected');
});
ipad(“HTML2”)发送的内容(在渲染函数中加载):
socket.emit('cameraControls', function(controls){});
Desktop Sphere 接收到的内容(也在渲染函数中加载):
socket.on('sendControls', function(controls){
//this.controls = controls;
console.log("got EVENT");
});
有什么想法吗?这是我第一次使用 socket.io
。终端或控制台日志中没有错误,所以我不确定我做错了什么。
最佳答案
发出事件时应该传递一个对象:
socket.emit('cameraControls', {controls: controls});
要将控制信息传递到桌面,您的服务器代码应该是:
io.on('connection', function(socket){
socket.on('cameraControls', function(data){
socket.emit('sendControls', {controls: data.controls});
});
console.log('a user connected');
});
然后在桌面的事件监听器中,您可以访问如下控件:
socket.on('sendControls', function(data){
// this.controls = data.controls
console.log("got EVENT");
});
关于javascript - Socket.io 与 Three.js Sphere (OrbitControls),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844612/