javascript - 在按键三.js 上更改对象 Material 的问题

标签 javascript three.js

我试图在按下按键时将存储在数组中的颜色应用于我的对象,但由于某种原因,按下按键时我只能获取数组的第一个元素。请告诉我是否还有其他方法可以做到这一点。

我尝试了随机颜色功能,但我的要求不包括随机应用颜色。

 var onKeyDown = function(event) {

    if (event.keyCode == 67) { // when 'c' is pressed
                                 var index=0;    

                                object.traverse( function( child ) { if ( child instanceof THREE.Mesh ) {

                                        if (child.material.name == "Leather")  {
                                           var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue
                                            if(index == colors.length) index = 0;
                                            child.material.color.setHex(colors[index++]);
                                            child.material.needsUpdate=true;
                                            child.geometry.buffersNeedUpdate = true;
                                            child.geometry.uvsNeedUpdate = true;

                                        }
                                        }});

                            } };
                                document.addEventListener('keydown', onKeyDown, true);

最佳答案

您的变量“index”位于函数的局部范围内。因此,每次按下 C 键时都会对其进行初始化 (var index=0;)。

您只需将此变量移到函数之外,一切都会好起来的。

var index=0,
onKeyDown = function(event) {
    if (event.keyCode == 67) { // when 'c' is pressed
        object.traverse( function(child) { 
            if (child instanceof THREE.Mesh) {
                if (child.material.name == "Leather")  {
                    var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue
                    if(index == colors.length) index = 0;
                    child.material.color.setHex(colors[index++]);
                    child.material.needsUpdate=true;
                    child.geometry.buffersNeedUpdate = true;
                    child.geometry.uvsNeedUpdate = true;
                }
             }
        });
    }
};

document.addEventListener('keydown', onKeyDown, true);

关于javascript - 在按键三.js 上更改对象 Material 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37959776/

相关文章:

javascript - 单击其中的 Bootstrap 切换按钮时如何禁用 anchor 标记单击

three.js - 如何在Three.js中构造空心圆柱体

JSON - Blender 和 ThreeJS - JSON 中位置 0 处出现意外标记 <

javascript - 如何使用三个js检查动态变化的 boolean 值

javascript - 如何从 TinyMCE 的 fMath 编辑器插件获取 MathML/Latex 代码?

javascript - 如何在街景 map 中添加搜索选项我的谷歌地图插件

javascript - 分组表行的 CSS 样式

javascript - 如何改进这个 JS Parallax 类型的数学方程?

javascript - Three.js - 当相机旋转90度 Angular 时,为什么在x轴和z轴上旋转效果相同?

three.js - glClipPlane - webGL 中有等效的吗?