Javascript 突出显示鼠标上方的对象';不能正常工作

Javascript 突出显示鼠标上方的对象';不能正常工作,javascript,three.js,Javascript,Three.js,所以我想突出显示对象,当鼠标在必要的对象(球体)上时。出于某种原因,它检测到球体,并改变其颜色,但它与它是塔克。每当我将鼠标悬停在其他对象上时,它不会进行光线投射,仍然会更新当前选定对象(原始球体)的颜色 我在官方的Three.js示例中提到了原始示例: 当然,大部分不必要的代码被省略:) 预期结果:每当鼠标悬停在球体上时,它都会高亮显示,当鼠标未悬停在球体上时,它会返回到原始颜色 实际:它只高亮显示一个球体,未覆盖时不会返回原始颜色。以下是我的解决方案: 显然,问题是通过链表推理解决的。我将全

所以我想突出显示对象,当鼠标在必要的对象(球体)上时。出于某种原因,它检测到球体,并改变其颜色,但它与它是塔克。每当我将鼠标悬停在其他对象上时,它不会进行光线投射,仍然会更新当前选定对象(原始球体)的颜色

我在官方的Three.js示例中提到了原始示例:

当然,大部分不必要的代码被省略:)

预期结果:每当鼠标悬停在球体上时,它都会高亮显示,当鼠标未悬停在球体上时,它会返回到原始颜色

实际:它只高亮显示一个球体,未覆盖时不会返回原始颜色。

以下是我的解决方案:

显然,问题是通过链表推理解决的。我将全局变量重新分配给了本地变量,这使我的代码变得一团糟,并将mouseover事件处理程序更改为mousemove,以不断更新鼠标坐标。以下是更正后的代码:

init(){
    map.addEventListener('mousemove', this.mouseOverScene,false);
},

render() {


    // find intersections

    this.rayCaster.setFromCamera(this.mouse, this.camera);

    this.intersectHighlighted = this.rayCaster.intersectObjects(this.spheres);

    if ( this.intersectHighlighted.length > 0) {
      if (this.highlighted !=  this.intersectHighlighted[0].object) {
        if ( this.highlighted ) this.highlighted.material.emissive.setHex( this.highlighted.currentHex );

        this.highlighted =  this.intersectHighlighted[0].object;
        this.highlighted.currentHex = this.highlighted.material.emissive.getHex();
        this.highlighted.material.emissive.setHex( 0xff0000 );
      }
    } else {
      if ( this.highlighted ) {
        this.highlighted.material.emissive.setHex( this.highlighted.currentHex );
      }
      this.highlighted = null;
    }
    }

这里回答:谢谢你的评论,但是我想要更纯的three.js方法来解决这个问题。实际上已经解决了:)你愿意分享吗?对其他人来说可能是有用的。我想你可以用解决方案段落更新你的问题当然,就这么做了:)
init(){
    map.addEventListener('mousemove', this.mouseOverScene,false);
},

render() {


    // find intersections

    this.rayCaster.setFromCamera(this.mouse, this.camera);

    this.intersectHighlighted = this.rayCaster.intersectObjects(this.spheres);

    if ( this.intersectHighlighted.length > 0) {
      if (this.highlighted !=  this.intersectHighlighted[0].object) {
        if ( this.highlighted ) this.highlighted.material.emissive.setHex( this.highlighted.currentHex );

        this.highlighted =  this.intersectHighlighted[0].object;
        this.highlighted.currentHex = this.highlighted.material.emissive.getHex();
        this.highlighted.material.emissive.setHex( 0xff0000 );
      }
    } else {
      if ( this.highlighted ) {
        this.highlighted.material.emissive.setHex( this.highlighted.currentHex );
      }
      this.highlighted = null;
    }
    }