Socket.io with Three.js Sphere(OrbitControls)

时间:2016-06-15 19:56:06

标签: javascript ipad socket.io three.js

我现在正在做一些事情而且我不能让它发挥作用。我有一个带控件的three.js球体(桌面上的“HTML1”)。 (THREE.OrbitControls)这在计算机和平板电脑上都很好用。我想要做的是通过我的ipad控制该球体,所以我在我的ipad上运行的html文件(“HTML2”)上加载了一个空白场景。那个空白的三个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){});

桌面球体接收的内容(也在函数渲染中加载):

socket.on('sendControls', function(controls){
         //this.controls = controls;
         console.log("got EVENT");
});

有什么想法吗?这是我第一次使用socket.io。终端或控制台日志中没有错误,所以我不确定我做错了什么。

1 个答案:

答案 0 :(得分:1)

发出事件时应该传递一个对象:

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");
});